就差Subtask #1的#2,不知道为什么wa?
查看原帖
就差Subtask #1的#2,不知道为什么wa?
1183187
sxhy楼主2024/3/26 22:12
#include<bits/stdc++.h>
using namespace std;
const int N = 1001000;
const int M = 2 * 10000010;
typedef long long ll;
int n, m, d[N], zb[N], cnt[N];
int a, b, p;

struct edge {
	int v, d;
	/*
	bool operator <(const edge& qt)const {
		return d < qt.d;
	}
	*/
};
struct node {
	int v, dep;
};
vector<edge>e[N];

inline int spfa(int s) {
	queue<int>q;
	d[s] = 0;
	//for (int i = 1; i <= n; i++) { q.push({ i }); zb[i] = 1,cnt[i]++; }
	q.push({ s});
	zb[s] = 1;
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		zb[u] = 0;
		for (auto nv : e[u]) {
			int v = nv.v, w = nv.d;
			if (d[v]>d[u] + w) {
				d[v] = d[u] + w;

				if (!zb[v]) {
					q.push({ v });
					zb[v] = 1;
					cnt[v]++;
					if (cnt[v] >=n+1)return 0;
				}


			}


		}



	}


	return 1;

}
int main() {
	int T;
	cin >> T;
	while (T--) {
		memset(d, 0x3f, sizeof(d));
		memset(cnt, 0, sizeof(cnt));
		memset(zb, 0, sizeof(zb));
		int a, b, w, shu;
		cin >> n >> m;
		for (int i = 0; i <= n + 1; i++)  e[i].clear();
		for (int i = 0; i <= n; i++) { 
			e[n+1].push_back({ i,0 });
		}
		for (int i = 1; i <= m; i++) {
			cin >> a >> b >> w;
			e[b].push_back({a-1,-w});
			e[a-1].push_back({ b,w });
	     }
		if (spfa(n+1)) {
			
			cout << "true\n";

		}
		else cout << "false\n";
	}
}
2024/3/26 22:12
加载中...