求!
查看原帖
求!
256996
かわいい子楼主2020/10/27 09:18
#include<cstdio>
#include<iostream>
#include<utility>
#include<queue>
const int maxn=100001;


using namespace std;

struct QWQ
{
	int next;
	int to;
	int w;
}edge[maxn];
int read()
{
	int x=0;int 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; 
} 
int n,m,s;
int head[maxn];
int dis[maxn];
int vis[maxn];
int sum_edge;
void add(int from,int to,int w)
{
	edge[++sum_edge].to=to;
	edge[sum_edge].next=head[from];
	edge[sum_edge].w=w;
	head[from]=sum_edge; 
}
void init()
{
	n=read();m=read();s=read();
	//cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int x=read();
		int y=read();
		int w1=read();
		//int x,y,w1;
		//cin>>x>>y>>w1;
		add(x,y,w1);
	}
}
void dijktra()
{
	for(int i=1;i<=n;i++)
	dis[i]=1e9;
	dis[s]=0;
	priority_queue<pair<int,int> > q;
	q.push(make_pair(0,s));
	int now;
	while(!q.empty())
	{
		now=q.top().second;
		q.pop();
		if(vis[now])
		continue;
		vis[now]=1;
		for(int i=head[now];i;i=edge[i].next)
		{
			int w=dis[i]+edge[i].w;
			int to=edge[i].to;
			if(dis[to]>w)
			{
				dis[to]=w;
				q.push(make_pair(-w,to));
			}
		}
	}
}
void outit()
{
	for(int i=1;i<=n;i++)
	cout<<dis[i]<<" ";  
}
int main()
{
	init();
	dijktra();
	outit();
	return 0;
}

调了很多遍了!!!!!

2020/10/27 09:18
加载中...