90分求调!WA #9 Line7
查看原帖
90分求调!WA #9 Line7
1090818
demonzz楼主2024/1/19 01:07
#include<bits/stdc++.h>
const double eps = 1e-5; const int inf = 0x7f7f7f7f;const int mod = 80112002; const double PI = 3.1415926535; const int int_max = 2147483647; const int int_min = -2147483648; using namespace std; typedef pair<int, int> pii; typedef long long ll; typedef unsigned int ui; typedef unsigned long long ull; typedef long long LL;
#define endl '\n'
#define ll_max 92233720368547758072
#define scanf scanf_s
#define hh <<"\n"
#define kg <<" "
#define www ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);

const int maxn = 1e5 + 5;
struct edge
{
	int v, w;
};
int T,n, m, s, uu, vv, ww;
vector<edge> e[maxn];
int dist[maxn];
int cnt[maxn];
bool in_queue[maxn];

bool spfa(int s) 
{

	bool flag = 0;
	memset(dist, 0x3f3f, sizeof(dist));
	memset(in_queue, 0, sizeof(in_queue));
	memset(cnt, 0, sizeof(cnt));
	queue <int> q;
	q.push(1);
	dist[1] = 0;
	in_queue[1] = 1;
	cnt[1] = 1;
	while (!q.empty()) {
		int  u = q.front();
		q.pop();
		in_queue[u] = false;
		for (int i = 0; i < e[u].size(); i++) {
			int v = e[u][i].v;
			int w= e[u][i].w;
			if (dist[v] > dist[u] + w) {
				dist[v] = dist[u] + w;
				if (!in_queue[v]) {
					cnt[v]++;
					q.push(v);
					in_queue[v] = true;
					if (cnt[v] >= n) {
						flag = 1; return flag;
					}
				}
			}
		}
	}
	return flag;
}
int main() {

	//FILE* inputs;freopen_s(&inputs, "tst.in", "r", stdin);
	cin >> T;
	while(T--)
	{
		cin >> n >> m;
		for (int i =0; i < n; i++)
		{
			e[i].clear();
		}
		for (int i = 0; i < m; i++) {
			cin >> uu >> vv >> ww;
			e[uu].push_back(edge{vv,ww});
			if (ww >= 0) {
				e[vv].push_back(edge{uu,ww});
			}
		}
		cout<<(spfa(1)?"YES\n":"NO\n");
	}
	//fclose(inputs);
	return 0;
}
2024/1/19 01:07
加载中...