dijk模板10pts求调
查看原帖
dijk模板10pts求调
158652
IQ勇士楼主2022/8/9 15:25

RT,代码如下

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
struct edge{
	int to;
	int power;
	int next;
}e[500001];
int head[10001], st, n, m, dis[10001], top;
struct cmp{
	bool operator () (int a, int b)
	{
		return dis[a] < dis[b];
	}
};
priority_queue <int, vector<int>, cmp> q;
int main()
{
	cin >> n >> m >> st;
	memset(head, -1, sizeof(head));
	for(int i = 1; i <= n; i++)
		if(i == st)
			dis[i] = 0;
		else
		{
			dis[i] = 999999999;
			q.push(i);
		}
	for(int i = 1; i <= m; i++)
	{
		int u, v, w;
		cin >> u >> v >> w;
		e[++top].to = v;
		e[top].power = w;
		e[top].next = head[u];
		head[u] = i;
		if(u == st)
			dis[v] = min(dis[v], w);	
	}
	while(!q.empty())
	{
		int now = q.top();
		q.pop();
		for(int i = head[now]; i != -1; i = e[i].next)
			dis[e[i].to] = min(dis[e[i].to], dis[now] + e[i].power);
	}
	for(int i = 1; i <= n; i++)
		if(dis[i] == 9999999999)
			cout << 2147483647 << ' ';
		else
			cout << dis[i] << ' ';
	return 0;
}
2022/8/9 15:25
加载中...