求助 堆优不过板子
查看原帖
求助 堆优不过板子
229373
Xeqwq楼主2022/1/13 22:50
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int n,m,s;
const int MAXV=100005;
const int INF=2147483647;
int d[MAXV];
bool vis[MAXV];
struct Node 
{
	int v;
	int dis;
	Node(int V,int Dis)
	{
		v=V;
		dis=Dis;
	}
	friend bool operator<(Node n1,Node n2)
	{
		return n1.dis>n2.dis;
	}
};
vector<Node> adj[MAXV];
priority_queue<Node> q; 
void dijkstra()
{
	d[s]=0;
	vis[s]=true;
	q.push(Node(s,0));
	while(!q.empty())
	{
		int u=q.top().v;
		q.pop();
		vis[u]=true;
		for(int j=0,int us=adj[u].size();j<us;j++)
		{
			int v=adj[u][j].v;
			if(vis[v]==false&&d[u]+adj[u][j].dis<d[v])
			{
				d[v]=d[u]+adj[u][j].dis;
				q.push(Node(v,d[v]));
			}
		}
	}
}
int main()
{
	int u,v,w;
	scanf("%d%d%d",&n,&m,&s);
	fill(d,d+MAXV,INF);
	while(m--)
	{
		scanf("%d%d%d",&u,&v,&w);
		if(u==s) d[v]=min(d[v],w);
		adj[u].push_back(Node(v,w));
	}
	dijkstra();
	for(int i=1;i<=n;i++)
		printf("%d ",d[i]);
	return 0;
}
2022/1/13 22:50
加载中...