数据??
查看原帖
数据??
119726
wzysky楼主2021/8/11 14:39
#include <bits/stdc++.h>
using namespace std;
const int maxn = 500010;
const int maxm = 500010;
int val[maxm], to[maxm], next[maxn], head[maxn], ecnt = 0;
int n, m, dis[maxn], st;
struct node	{
	int num, d;
	node(int nm, int dd)	{
		num = nm;
		d = dd;
	}	
	bool operator < (const node &a) const	{
		return d > a.d;
	}
};
priority_queue <node> pq;
void add(int u, int v, int w)	{
	ecnt++;
	val[ecnt] = w;
	to[ecnt] = v;
	next[ecnt] = head[u];
	head[u] = ecnt;
}
int main()	{
	scanf("%d%d%d", &n, &m, &st);
	for (int i = 1; i <= n; i++)
		dis[i] = 2147483647;
	for (int i = 0; i < m; i++)	{
		int u, v, w;
		scanf("%d%d%d", &u, &v, &w);
		add(u, v, w);
	}
	dis[st] = 0;
	pq.push(node(st, 0));
	while (!pq.empty())	{
		node hd = pq.top();
		pq.pop();
		int u = hd.num;
		if (hd.d != dis[u])	
			continue;
		for (int i = head[u]; i; i = next[i])	{
			int v = to[i];
			if (dis[u] + val[i] < dis[v])	{
				dis[v] = dis[u] + val[i];
				pq.push(node(v, dis[v]));
			}
		}
	}
	for (int i = 1; i <= n; i++)
		printf("%d ", dis[i]);
}

把maxn改为500010就能过,100010过不了?

2021/8/11 14:39
加载中...