90分求助,WA了#2
查看原帖
90分求助,WA了#2
181162
qd_zhanghuali楼主2020/7/31 10:56

代码:

#include<cstdio>
using namespace std;
bool vis[1001];
int first[1001],next[100001],dis[1001],u[100001],v[100001],w[100001],n,m,ans,inf=1000000001;
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&u[i],&v[i],&w[i]);
		if(u[i]==1)dis[v[i]]=w[i];
		next[i]=first[u[i]];
		first[u[i]]=i;
	}
	vis[1]=1;
	for(int i=2;i<=n;i++)if(dis[i]==0)dis[i]=inf;
	for(int i=1;i<=n-1;i++){
		int d=0,minn=inf;
		for(int l=1;l<=n;l++){
			if(vis[l]==0&&dis[l]<minn){
				d=l;
				minn=dis[l];
			}
		}
		vis[d]=1;
		for(int j=first[d];j!=0;j=next[j]){
			if(dis[v[j]]>dis[d]+w[j])dis[v[j]]=dis[d]+w[j];
		}
	}
	for(int i=1;i<=n;i++){
		ans+=dis[i];
		vis[i]=0;
		dis[i]=inf;
		first[i]=0;
	}
	vis[1]=1;
	dis[1]=0;
	for(int i=1;i<=m;i++){
		int t=v[i];
		v[i]=u[i];
		u[i]=t;
		if(u[i]==1)dis[v[i]]=w[i];
		next[i]=0;
		next[i]=first[u[i]];
		first[u[i]]=i;
	}
	for(int i=1;i<=n-1;i++){
		int d=0,minn=inf;
		for(int l=1;l<=n;l++){
			if(vis[l]==0&&dis[l]<minn){
				d=l;
				minn=dis[l];
			}
		}
		vis[d]=1;
		for(int j=first[d];j!=0;j=next[j]){
			if(dis[v[j]]>dis[d]+w[j])dis[v[j]]=dis[d]+w[j];
		}
	}
	for(int i=1;i<=n;i++){
		ans+=dis[i];
	}
	printf("%d",ans);
	return 0; 
}

每次#2都输出99

2020/7/31 10:56
加载中...