玄学AC求助
查看原帖
玄学AC求助
495469
Amidst楼主2024/8/3 14:13

WA 0pts 记录

AC 记录

WA 0pts 代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s;
int u,v,w;
int vis[1005],a[1005],ans[1005],mrg[1005][1005];
void dijkstra()
{
	for(int i=1;i<=n;i++)
	{
		int k=0,minn=0x3f3f3f3f3f3f3f3f;
		for(int j=1;j<=n;j++)
			if(!vis[j]&&a[j]<minn)
			{
				k=j;
				minn=a[j];
			}
		vis[k]=1; // tag which signs whether the minimum value is appeared.  
		for(int j=1;j<=n;j++)
			if(vis[j]&&mrg[k][j])
			{
				if(a[j]+a[k]==a[mrg[k][j]])
					ans[mrg[k][j]]+=ans[j]*ans[k];
				if(a[mrg[k][j]]>a[j]+a[k])
				{
					a[mrg[k][j]]=a[j]+a[k];
					ans[mrg[k][j]]=ans[j]*ans[k];
				}
			}
	}
}
signed main()
{
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
		ans[i]=1;
	}
	while(~scanf("%lld%lld%lld",&u,&v,&w))
		mrg[++u][++v]=mrg[v][u]=++w;
	dijkstra();
	printf("%lld %lld\n",a[1],ans[1]);
	return 0;
}

将

	while(~scanf("%lld%lld%lld",&u,&v,&w))
		mrg[++u][++v]=mrg[v][u]=++w;

改为

	while(~scanf("%lld%lld%lld",&u,&v,&w))
		mrg[u+1][v+1]=mrg[v+1][u+1]=w+1;

WA 0pts → AC

2024/8/3 14:13
加载中...