求助,dij写挂了
查看原帖
求助,dij写挂了
462792
lxwh楼主2021/8/17 22:10

RT

用的堆优化,代码如下

#include <bits/stdc++.h>

using namespace std;

const int maxn = 100010;
const int maxm = 500010;
struct edge
{
	int to, val, nxt;
} e[maxm];
int head[maxn], tot;
int dis[maxn];
bool vis[maxn];
int n, m, s;
priority_queue< pair<int, int> > que;

inline void addedge(int u, int v, int val)
{
	e[++tot].to = v;
	e[tot].val = val;
	e[tot].nxt = head[u];
	head[u] = tot;
}

inline void dijkstra()
{
	memset(dis, 0x7f, sizeof(dis));
	memset(vis, 0, sizeof(vis));
	dis[s] = 0;
	que.push(make_pair(0, s));

	while (que.size())
	{
		int x = que.top().second;
		que.pop();

		if (vis[x]) continue;
		vis[x]=true;

		for (int i = head[x]; i; i = e[i].nxt)
		{
			int y = e[i].to, z = e[i].val;

			if (dis[y] > dis[x] + z)
			{
				dis[y]=dis[x]+z;
				que.push(make_pair(-dis[y], y));
			}
		}
	}
}

int main()
{
//	freopen("dijkstraheap.in", "r", stdin);
//	freopen("dijkstraheap.out", "w", stdout);
	cin >> n >> m >> s; 
	for (int i = 1; i <= m; ++i)
	{
		int u, v, val;
		cin >> u >> v >> val;
		addedge(u, v, val);
	}
	dijkstra();
	for(int i=1;i<=n;i++)
	{
		if(s==i)
		{
			cout<<0<<" ";
		}
		else
		{
			cout << dis[i] << endl;
		}
	}
	return 0;
}
2021/8/17 22:10
加载中...