TLE 求助
查看原帖
TLE 求助
335771
cjWYZtql楼主2023/10/14 13:05

如题.

#include "bits/stdc++.h"
#define ll long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

using namespace std;

struct Node {
	int id;
	ll dis;
};

int fr[550000];

ll dis[550000];

int T, n, m;

Node Findroot(int x) {
	if (fr[x] == x) {
		Node p;
		p.id = x;
		p.dis = 0ll;
		return p;
	}
	Node _p = Findroot(fr[x]), __p;
	fr[x] = _p.id;
	dis[x] = _p.dis + dis[x];
	__p.id = fr[x];
	__p.dis = dis[x];
	return __p;
}

bool Union(int x, int y, ll Dis) {
	Node xp = Findroot(x);
	Node yp = Findroot(y);
	
	if (xp.id == yp.id) {
		if ((xp.dis - yp.dis) != Dis) return false;
		else return true;
	} else {
		fr[y] = x;
		dis[y] = Dis + xp.dis - yp.dis;
		return true;
	}
}

void Main() {
	scanf ("%d%d", &n, &m);
	for (int i = 1; i <= n; ++i) {
		fr[i] = i;
		dis[i] = 0ll;
	}
	for (int i = 1; i <= m; ++i) {
		int a, b;
		ll D;
		scanf ("%d%d%lld", &a, &b, &D);
		if (!(Union(a, b, D))) {
			puts("NO");
			return;
		}
	}
	puts("YES");
}

int main() {
	
//	freopen ("queue.in", "r", stdin);
//	freopen ("queue.out", "w", stdout);
	
	scanf ("%d", &T);
	while (T--) {
		Main();
	}
}

不会是路径压缩假了吧

2023/10/14 13:05
加载中...