90pts求助(并查集)!
查看原帖
90pts求助(并查集)!
933808
Earth2023楼主2024/12/31 21:59

TLE on #8,自造数据n=10000,m=100000 要5s时间 不知道怎么改了

#include <iostream>
#define IOS ios::sync_with_stdio(0); cin.tie(0);
using namespace std;
int fa[10005], msgSize[10005], val[10005], nowI[10005], n, m, op, a, b;
int find(int now) {
	if (fa[now] != now) fa[now] = find(fa[now]);
	return fa[now];
}
void merge(int x, int y) {
	x = find(x), y = find(y);
	for (int i = 1; i <= n; i++) nowI[i] = find(i), msgSize[i] += val[nowI[i]];
	for (int i = 1; i <= n; i++) val[nowI[i]] = 0;
	fa[x] = y;
}
int main() {
	IOS;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) fa[i] = i;	
	for (int i = 1; i <= m; i++) {
		cin >> op >> a >> b;
		if (op == 1) merge(a, b);
		else val[find(a)] += b;
	}
	for (int i = 1; i <= n; i++) printf("%d ", msgSize[i] + val[find(i)]);
	return 0;
}
2024/12/31 21:59
加载中...