求助:为什么WA了两个点?
查看原帖
求助:为什么WA了两个点?
435312
Security_Guard楼主2021/3/16 21:33
#include<cstdio>
#include<iostream>
#include<queue>
#define N 100001
#define M 501010
using namespace std;
int n,m,s,num;
long long fir[N],d[N];
bool vis[N];
struct bal{
	int next;
	int to;
	int dis;
};
bal e[M];
struct node {
	int dis;
	int pos;
	bool operator <(const node &x)const
	{
		return x.dis<dis;
	}
};
priority_queue <node> q;
void add(int x,int y,int z){
	e[++num].next=fir[x];
	e[num].to=y;
	e[num].dis=z;
	fir[x]=num;
}
inline int re()
{
    int x=0,k=1; char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')k=-1;c=getchar();}
    while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return x*k;
}
void dijkstra(int x){
	d[x]=0;
	q.push((node) {0,x});
	while(!q.empty()){
		node tem=q.top();
		q.pop();
		int a=tem.pos,b=tem.dis;
		if(vis[a])
		continue;
		vis[a]=1;
		for(int i=fir[a];i;i=e[i].next){
			int y=e[i].to;
			if(d[y]>d[a]+e[i].dis){
				d[y]=d[a]+e[i].dis;
				if(!vis[y])
				q.push((node){d[y],y});
			}
		}
	}
}
int main()
{
	n=re();m=re();s=re();
	for(int i=1;i<=m;i++){
		int a,b,c;
		a=re();b=re();c=re();
		add(a,b,c);
		add(b,a,c);
	}
	for(int i=1;i<=n;i++)
	d[i]=1e10;
	dijkstra(s);
	for(int i=1;i<=n;i++)
	cout<<d[i]<<" ";
	return 0;
}
2021/3/16 21:33
加载中...