全RE求助
查看原帖
全RE求助
166424
h_m_h楼主2020/7/29 15:53

用的是Dijkstra算法,本地测评过,想向各位大佬大犇求助

#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PR;
const int maxn = 50005;
int n,dis[50005],m;
bool vis[maxn];
struct edge
{
	int to;
	int v;
};
vector<edge> f[50005];
int dj(int n,int s)
{
	for(int i=1;i<=n;i++)
    {
		dis[i]=2147483637;
		vis[i]=false;
	}
	dis[s]=0;
	priority_queue<PR, vector<PR>, greater<PR> > q;
	q.push(PR(dis[s], s));
	while(!q.empty())
	{
		int u = q.top().second;
		q.pop();
		if(vis[u]) continue;
		vis[u] = true;
		for(int j=0;j<f[u].size();j++)
		{
			int v=f[u][j].to;
			int w=f[u][j].v;
			if (!vis[v] && dis[u] + w < dis[v])
				dis[v] = dis[u] + w;
				q.push(PR(dis[v], v));
		}
	}
		
}
int main()
{
	ios::sync_with_stdio(false);
	int n,s;
	cin>>n>>m>>s;
	edge tmp;
	for(int i=1;i<=m;i++)
	{
		int x;
		cin>>x>>tmp.to>>tmp.v;
		f[x].push_back(tmp);
	}
	dj(n,s);
	for(int i=1;i<=n;i++)
        cout<<dis[i]<<" ";
}
2020/7/29 15:53
加载中...