萌新求助严格次短路
查看原帖
萌新求助严格次短路
242543
Ryo_Yamada楼主2020/9/30 19:54

rt,WA 70,找不出错误了/kk

#include <bits/stdc++.h>

using namespace std;

const int N = 5005;

struct Edge {
	int to, val, nxt;
} e[N << 1];

int n, m;
int head[N], cnt;
int disf[N], diss[N];
bool in[N];

void Add(int u, int v, int w) {
	e[++cnt].to = v;
	e[cnt].val = w;
	e[cnt].nxt = head[u];
	head[u] = cnt;	
}

void SPFA() {
	memset(disf, 0x3f, sizeof disf);
	memset(diss, 0x3f, sizeof diss);
	queue<int> q;
	disf[1] = 0;
	in[1] = true;
	q.push(1);
	while(!q.empty()) {
		int u = q.front();
		q.pop();
		in[u] = false;
		for(int i = head[u]; i; i = e[i].nxt) {
			bool push = false;
			int v = e[i].to, w = e[i].val;
			if(disf[v] > disf[u] + w) {
				diss[v] = disf[v];
				disf[v] = disf[u] + w;
				push = true;
			}
			else if(disf[v] < disf[u] + w) {
				if(diss[v] > disf[u] + w) {
					diss[v] = disf[u] + w;
					push = true;
				}
			}
			if(diss[v] > diss[u] + w) {
				diss[v] = diss[u] + w;
				push = true;
			}
			if(push && !in[v]) {
				q.push(v);
				in[v] = true;	
			}
		}
	}
}

int main() {
	cin >> n >> m;
	for(int i = 1; i <= m; i++) {
		int u, v, w;
		scanf("%d%d%d", &u, &v, &w);
		Add(u, v, w);
		Add(v, u, w);
	}
	SPFA();
	cout << diss[n] << endl;
	return 0;
}
2020/9/30 19:54
加载中...