voidjoin(int x, int y){ int a = find(x), b = find(y); //剪枝,否则超时 if (a == b) return; for (int i = 1; i <= n; ++i) { val[i] += add[find(i)]; } memset(add, 0, sizeof(add)); fa[a] = b; }
intmain(){ cin >> n >> m; int opt, a, b, p, t; for (int i = 1; i <= n; ++i) fa[i] = i; while (m--) { cin >> opt; if (opt == 1) { cin >> a >> b; join(a, b); } elseif (opt == 2) { cin >> p >> t; add[find(p)] += t; } } for (int i = 1; i <= n; ++i) cout << val[i] + add[find(i)] << " "; return0; }