大佬求教,为什么3个测试点没过
查看原帖
大佬求教,为什么3个测试点没过
489506
LiXingWang楼主2021/3/24 16:48
# include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
int n,m,s,t;
int tot = 0;
struct edge{
	int to,next,w;
}e[maxn];
int first[maxn];
void addedge (int u,int v,int w)
{
	e[++tot].next = first[u];
	e[tot].to = v;
	e[tot].w = w;
	first[u] = tot;
}
struct Dijkstra{
	int dis[maxn];
	bool vis[maxn];
	typedef pair<int,int> P;
	priority_queue<P,vector<P>,greater<P> > q;
	Dijkstra(){
		memset(dis,0x3f,sizeof(dis));
		memset(vis,0,sizeof(0));
	}
	void work(int s){
		dis[s] = 0;
		q.push(make_pair(0,s));
		while(!q.empty())
		{
			int now = q.top().second;
			q.pop();
			if(vis[now]) continue;
			vis[now] = 1;
			for(int i = first[now];i;i = e[i].next)
			{
				int v = e[i].to,w = e[i].w;
				if(vis[v] == 0&&dis[v]>dis[now]+w)
				{
					dis[v] = dis[now]+w;
					q.push(make_pair(dis[v],v));
				}
			}
		}
	}
}dijkstra;
int main ()
{
	cin>>n>>m>>s;
	for(int i = 0;i<m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		addedge(u,v,w);
		addedge(v,u,w);
	}
	dijkstra.work(s);
	int t = 1;
	cout<<dijkstra.dis[t];
	while(t++<n)
	{
		cout<<" "<<dijkstra.dis[t];
	}
	cout<<endl;
}
2021/3/24 16:48
加载中...