Submission #1173952

#TimeUsernameProblemLanguageResultExecution timeMemory
1173952stdfloat다리 (APIO19_bridges)C++20
14 / 100
54 ms4020 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

#define ff	first
#define ss	second
#define pii	pair<int, int>

vector<int> p, sz;

int fnd(int x) {
	return p[x] = (x == p[x] ? x : fnd(p[x]));
}

void uni(int x, int y) {
	x = fnd(x); y = fnd(y);

	if (x == y) return;

	p[y] = x;
	sz[x] += sz[y]; sz[y] = 0;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);

	int n, m;
	cin >> n >> m;

	vector<pair<int, pii>> E;
	for (int i = 1; i <= m; i++) {
		int u, v, d;
		cin >> u >> v >> d;
		
		E.push_back({d, {u, v}});
	}

	int q;
	cin >> q;
	for (int i = 1; i <= q; i++) {
		int t;
		cin >> t;

		assert(t == 2);
	
		int s, w;
		cin >> s >> w;

		E.push_back({w, {-i, s}});
	}

	sort(E.begin(), E.end());
	reverse(E.begin(), E.end());

	p = sz = vector<int>(n + 1, 1);
	iota(p.begin() + 1, p.end(), 1);

	vector<int> ans(q + 1);
	for (auto [w, i] : E) {
		if (0 < i.ff) uni(i.ff, i.ss);
		else ans[-i.ff] = sz[fnd(i.ss)];
	}

	for (int i = 1; i <= q; i++)
		cout << ans[i] << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...