제출 #1044767

#제출 시각아이디문제언어결과실행 시간메모리
1044767vjudge1다리 (APIO19_bridges)C++17
13 / 100
84 ms2820 KiB
#include <bits/stdc++.h>

using i64 = long long;

#ifdef DEBUG
	#include "debug.h"
#else 
	#define debug(...) void(23)
#endif

constexpr int maxN = int(5E4) + 5;

std::vector<int> adj[maxN];

struct DSU {
	std::vector<int> par, siz;
	DSU() : DSU(0) {}
	DSU(int n) { init(n); }
	void init(int n) {
		par.assign(n, 0);
		siz.assign(n, 1);
		std::iota(par.begin(), par.end(), 0);
	}
	int get(int x) {
		while(x != par[x]) {
			x = par[x] = par[par[x]];
		}
		return x;
	}
	bool unite(int a, int b) {
		a = get(a), b = get(b);
		if(a == b) {
			return false;
		} else if(siz[a] > siz[b]) {
			std::swap(a, b);
		}
		par[a] = b;
		siz[b] += siz[a];
		return true;
	}
	int size(int x) {
		return siz[get(x)];
	}
};

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

	int N, M, Q;
	std::cin >> N >> M;
	std::vector<int> A(M), B(M), C(M);
	for(int i = 0; i < M; ++i) {
		std::cin >> A[i] >> B[i] >> C[i];
		--A[i], --B[i];
	}

	std::cin >> Q;

	if(N <= 1000 && M <= 1000 && Q <= 10000) {
		std::vector<int> ord(M);
		std::iota(ord.begin(), ord.end(), 0);
		DSU dsu;
		for(int i = 0; i < Q; ++i) {
			debug(i);
			int T;
			std::cin >> T;
			if(T == 1) {
				int j, R;
				std::cin >> j >> R;
				--j;
				C[j] = R;
			} else {
				int S, W;
				std::cin >> S >> W;
				--S;
				dsu.init(N);
				std::sort(ord.begin(), ord.end(), [&](int lhs, int rhs) {
					return C[lhs] < C[rhs];
				});
				debug("wtf");
				for(int j : ord) {
					if(C[j] >= W) {
						dsu.unite(A[j], B[j]);
					}
				}
				debug("wtf");
				std::cout << dsu.size(S) << '\n';
			}
		}
		return 0;
	}

	return 0;
}
#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...