Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pii;
- typedef pair<long long, long long> pll;
- #define ff first
- #define ss second
- #define mp make_pair
- #define pb push_back
- #define all(x) (x).begin(), (x).end()
- #define fap(x) cerr << __LINE__ << " says: " << #x << " = " << (x) << "\n"
- #define FastIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
- const long long INF = 2000000000000000000LL; // 2e18
- const int inf = 0x3f3f3f3f;
- const long double EPS = 1e-9;
- const int N = 1e5 + 7;
- int par[N], sz[N];
- vector<int> g[N], c[N];
- int n;
- vector< pii > edges;
- vector< vector<int> > queries;
- int Find(int r) {
- return par[r] == r ? r : Find(par[r]);
- }
- int base[N];
- bool vis[N];
- int st[N], en[N];
- void flat() {
- for(int i=1; i<=n; ++i) par[i] = i, sz[i] = 1;
- int counter = 0;
- for(auto &e : edges) {
- int u = e.first, v = e.second;
- int pu = Find(u), pv = Find(v);
- if(pu != pv) {
- ++counter;
- if(sz[pu] >= sz[pv]) {
- g[pu].push_back(pv);
- c[pu].push_back(counter);
- par[pv] = pu;
- sz[pu] += sz[pv];
- cerr << "Added " << pu << " -> " << pv << "\n";
- }
- else {
- g[pv].push_back(pu);
- c[pv].push_back(counter);
- par[pu] = pv;
- sz[pv] += sz[pu];
- cerr << "Added " << pu << " -> " << pv << "\n";
- }
- }
- }
- counter = 0;
- memset(vis, false, sizeof vis);
- for(int i=1; i<=n; ++i) {
- int p = Find(i);
- cerr << "par of " << i << ": " << p << "\n";
- if(vis[p]) continue;
- st[p] = counter + 1;
- priority_queue< pii > pq;
- pq.push(pii(0, p));
- while(!pq.empty()) {
- auto top = pq.top();
- pq.pop();
- int u = top.second;
- if(vis[u]) continue;
- cerr << "visited " << u << " at " << counter + 1 << "\n";
- ++counter;
- base[counter] = u;
- vis[u] = true;
- for(int i=0; i<(int) g[u].size(); ++i) {
- int v = g[u][i], w = c[u][i];
- if(!vis[v] and v != u) {
- pq.push(pii(-w, v));
- }
- }
- }
- en[p] = counter;
- }
- for(int i=1; i<=n; ++i) cerr << base[i] << "\n";
- }
- void clear() {
- }
- int main() {
- FastIO;
- int t, tc=0;
- cin >> t;
- while(t--) {
- clear();
- cin >> n;
- int q;
- cin >> q;
- while(q--) {
- vector<int> cur;
- int tp;
- cin >> tp;
- if(tp == 0) {
- int u, v;
- cin >> u >> v;
- edges.push_back(pii(u, v));
- cur = { tp, u, v };
- }
- else if(tp == 1) {
- int u, t;
- cin >> u >> t;
- cur = { tp, u, t };
- }
- else if(tp == 2) {
- int u, l, r;
- cin >> u >> l >> r;
- cur = { tp, u, l, r };
- }
- }
- flat();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement