这个dij为什么是假的?(WA)
查看原帖
这个dij为什么是假的?(WA)
297555
Zlc晨鑫楼主2020/11/14 10:50

谢谢点进来的大佬

#include <queue>
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;

struct edge 
{
	int v, w;	
};

const int N = 100000 + 5, INF = int((long long)(1 << 31) - 1);
vector<edge> e[N];
int dis[N];
bool vis[N];
priority_queue<int> pq; 

int main()
{
	int n, m, s;
	scanf("%d %d %d", &n, &m, &s);
	for (int i=1; i<=m; ++i)
	{
		int u, v, w;
		scanf("%d %d %d", &u, &v, &w);
		e[u].push_back({v, w});
	}
	for (int i=1; i<=n; ++i)
	{
		dis[i] = INF;
	}
	dis[s] = 0; 
	pq.push(s);
	while (!pq.empty()) {
		int x = pq.top();
		pq.pop();
		if (vis[x]) continue;
		vis[x] = true;
		for (int i = 0, len = e[x].size(); i < len; ++i) 
		{
			if (dis[e[x][i].v] > dis[x] + e[x][i].w)
			{
				dis[e[x][i].v] = dis[x] + e[x][i].w;
				pq.push(e[x][i].v);
			}		
		}
	}
	for (int i=1; i<=n; ++i)
		printf("%d ", dis[i]);
	putchar('\n');
	return 0;
}
2020/11/14 10:50
加载中...