差分约束样例可以过,但是全错……(RE*9+WA*1)
查看原帖
差分约束样例可以过,但是全错……(RE*9+WA*1)
804607
rainygame楼主2023/5/2 00:03
#include <bits/stdc++.h>
using namespace std;
#define MAXN 5001

int T, n, m, u, v, w;

struct Edge{
	int v, w;
};
vector<Edge> e[MAXN];
int dis[MAXN], cnt[MAXN];
bitset<MAXN> vis;
queue<int> que;

void spfa(int s){
	que.push(s);
	dis[s] = 0;
	vis[s] = true;
	
	while (!que.empty()){
		u = que.front();
		que.pop();
		vis[u] = false;
		for (auto i: e[u]){
			v = i.v;
			w = i.w;
			if (dis[v] > dis[u] + w){
				dis[v] = dis[u] + w;
				cnt[v] = cnt[u] + 1;
				if (cnt[v] >= n){
					cout << "NO\n";
					exit(0);
				}
				if (!vis[v]){
					que.push(v);
					vis[v] = true;
				}
			}
		}
	}
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin >> T;
	
	cin >> n >> m;
	while (m--){
		cin >> u >> v >> w;
		e[v].push_back({u, -w});
	}
	for (int i=1; i<=n; i++) e[0].push_back({i, 0});
	
	memset(dis, 0x3f, sizeof(dis));
	spfa(0);
	
	for (int i=1; i<=n; ++i) cout << dis[i] << ' ';
	
	return 0;
}

2023/5/2 00:03
加载中...