dijk模板求调
  • 板块学术版
  • 楼主IQ勇士
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/8/9 17:05
  • 上次更新2023/10/27 16:15:53
查看原帖
dijk模板求调
158652
IQ勇士楼主2022/8/9 17:05
#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], cnt, vis[10001];
struct cmp{
	bool operator () (int a, int b)
	{
		return dis[a] < dis[b];
	}
};
void add(int u, int v, int w)
{
	e[++cnt].to = v;
	e[cnt].power = w;
	e[cnt].next = head[u];
	head[u] = cnt;
}
priority_queue <int, vector<int>, cmp> q;
int minn = 999999999, minpos;
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;
	for(int i = 1; i <= m; i++)
	{
		int u, v, w;
		cin >> u >> v >> w;
		add(u, v, w);
		if(u == st)
		{
			dis[v] = min(dis[v], w);	
			if(dis[v] < minn)
			{
				minn = dis[v];
				minpos = v;
			}
		}
	}
	q.push(minpos);
	while(!q.empty())
	{
		int now = q.top();
		q.pop();
		for(int i = head[now]; i != -1; i = e[i].next)
		{
			if(e[i].power + dis[now] < dis[e[i].to])
			{
				dis[e[i].to] = dis[now] + e[i].power;
				q.push(e[i].to);
			}
		}
	}
	for(int i = 1; i <= n; i++)
		if(dis[i] == 9999999999)
			cout << 2147483647 << ' ';
		else
			cout << dis[i] << ' ';
	return 0;
}
2022/8/9 17:05
加载中...