Submission #410667

#TimeUsernameProblemLanguageResultExecution timeMemory
410667dynam1cBridges (APIO19_bridges)C++17
13 / 100
3097 ms8964 KiB
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

#define endl "\n"
#define all(c) (c).begin(),(c).end()

// when you ponder, divide and conquer

struct DSU {
	int n;
	vector<int> link, sz;
	DSU(int n) : n(n), link(n), sz(n, 1) {
		iota(all(link), 0);
	}
	void reset() {
		iota(all(link), 0);
		sz.assign(n, 1);
	}
	void unite(int u, int v) {
		u = find(u), v = find(v);
		if (u == v) return;
		if (sz[u] < sz[v]) swap(u, v);
		sz[u] += sz[v];
		link[v] = u;
	}
	int find(int v) {
		return link[v] == v ? v : link[v] = find(link[v]);
	}
};

signed main() {
	// freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	
	int n, m, q;
	cin >> n >> m;
	vector<pair<int, int>> es(m);
	vector<int> ws(m);
	set<pair<int, int>> s;
	for (int i = 0; i < m; i++) {
		int x, y, w;
		cin >> x >> y >> w;
		x--, y--;
		s.emplace(-w, i);
		es[i] = {x, y};
		ws[i] = w;
	}
	cin >> q;
	for (int qq = 0; qq < q; qq++) {
		int t, x, y;
		cin >> t >> x >> y;
		x--;
		if (t == 1) {
			s.erase({-ws[x], x});
			ws[x] = y;
			s.insert({-ws[x], x});
		} else {
			DSU dsu(n);
			for (auto [w, i] : s)
				if (-w < y)
					break;
				else
					dsu.unite(es[i].first, es[i].second);
			cout << dsu.sz[dsu.find(x)] << endl;
		}
	}
}
/* --- PSolving ---
 * Simplifying (getting rid of variables, conditions, code logic, etc.)
 * Reframing
 * Solving a subtask (subgoal, aux. problem, removing a condition or fixing a parameter, etc.)
 * Inducing
 * Divide and conquer
 * Working backwards
 * Visual intuition
 * !! Reductions don't have to be specializations, they can be generalizations
 */
#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...