求助
查看原帖
求助
304211
精神小伙!楼主2021/8/10 21:06

听取wa声一片。。。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=1e4+5,M=5e5+5;
int n,m,s;
int head[N],to[M],nxt[M],val[M],cnt;
int dis[N],vis[N];
void dijkstra()
{
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	for(int i=1;i<=n-1;++i)
	{
		int u=0;
		for(int j=1;j<=n;++j)
		    if(!vis[j]&&dis[j]<dis[u]) u=j;
		vis[u]=true;
		for(int j=head[u];j;j=nxt[j])
		{
			int v=to[j];
			dis[v]=min(dis[v],dis[u]+val[j]);
		}
	}
}
void add(int u,int v,int w)
{
	to[cnt++]=v;
	val[cnt]=w;
	nxt[cnt]=head[u];
	head[u]=cnt;
}
int main()
{
    cin>>n>>m>>s;
    while(m--)
    {
    	int u,v,w;
    	cin>>u>>v>>w;
    	add(u,v,w);
	}
	dijkstra();
	for(int i=1;i<=n;++i)
	{
		if(dis[i]==0x3f3f3f3f) 
		    cout<<2147483647<<' ';
		else
		    cout<<dis[i]<<' ';
	}
	return 0;
}
2021/8/10 21:06
加载中...