2929//int part;
3030//
3131//void addEdge(int i, int x, int y) {
32- // nxt[++cnt] = head[i];
33- // tox[cnt] = x;
34- // toy[cnt] = y;
35- // head[i] = cnt;
32+ // nxt[++cnt] = head[i];
33+ // tox[cnt] = x;
34+ // toy[cnt] = y;
35+ // head[i] = cnt;
3636//}
3737//
3838//int find(int i) {
39- // while (i != father[i]) {
39+ // while (i != father[i]) {
4040// i = father[i];
4141// }
42- // return i;
42+ // return i;
4343//}
4444//
4545//void Union(int x, int y) {
46- // int fx = find(x);
47- // int fy = find(y);
48- // if (siz[fx] < siz[fy]) {
49- // int tmp = fx;
50- // fx = fy;
51- // fy = tmp;
52- // }
53- // father[fy] = fx;
54- // siz[fx] += siz[fy];
55- // rollback[++opsize][0] = fx;
56- // rollback[opsize][1] = fy;
46+ // int fx = find(x);
47+ // int fy = find(y);
48+ // if (siz[fx] < siz[fy]) {
49+ // int tmp = fx;
50+ // fx = fy;
51+ // fy = tmp;
52+ // }
53+ // father[fy] = fx;
54+ // siz[fx] += siz[fy];
55+ // rollback[++opsize][0] = fx;
56+ // rollback[opsize][1] = fy;
5757//}
5858//
5959//void undo() {
60- // int fx = rollback[opsize][0];
61- // int fy = rollback[opsize--][1];
62- // father[fy] = fy;
63- // siz[fx] -= siz[fy];
60+ // int fx = rollback[opsize][0];
61+ // int fy = rollback[opsize--][1];
62+ // father[fy] = fy;
63+ // siz[fx] -= siz[fy];
6464//}
6565//
6666//void add(int jobl, int jobr, int jobx, int joby, int l, int r, int i) {
67- // if (jobl <= l && r <= jobr) {
68- // addEdge(i, jobx, joby);
69- // } else {
70- // int mid = (l + r) >> 1;
71- // if (jobl <= mid) {
67+ // if (jobl <= l && r <= jobr) {
68+ // addEdge(i, jobx, joby);
69+ // } else {
70+ // int mid = (l + r) >> 1;
71+ // if (jobl <= mid) {
7272// add(jobl, jobr, jobx, joby, l, mid, i << 1);
7373// }
74- // if (jobr > mid) {
74+ // if (jobr > mid) {
7575// add(jobl, jobr, jobx, joby, mid + 1, r, i << 1 | 1);
7676// }
77- // }
77+ // }
7878//}
7979//
8080//int dfs(int l, int r, int i) {
81- // int unionCnt = 0;
82- // for (int ei = head[i]; ei > 0; ei = nxt[ei]) {
83- // int fx = find(tox[ei]);
84- // int fy = find(toy[ei]);
85- // if (fx != fy) {
86- // Union(fx, fy);
87- // part--;
88- // unionCnt++;
89- // }
90- // }
91- // int ans = -1;
92- // if (l == r) {
93- // if (part == 1) {
81+ // int unionCnt = 0;
82+ // for (int ei = head[i]; ei > 0; ei = nxt[ei]) {
83+ // int fx = find(tox[ei]);
84+ // int fy = find(toy[ei]);
85+ // if (fx != fy) {
86+ // Union(fx, fy);
87+ // part--;
88+ // unionCnt++;
89+ // }
90+ // }
91+ // int ans = -1;
92+ // if (l == r) {
93+ // if (part == 1) {
9494// ans = l;
9595// }
96- // } else {
97- // int mid = (l + r) >> 1;
98- // ans = dfs(l, mid, i << 1);
99- // if (ans == -1) {
96+ // } else {
97+ // int mid = (l + r) >> 1;
98+ // ans = dfs(l, mid, i << 1);
99+ // if (ans == -1) {
100100// ans = dfs(mid + 1, r, i << 1 | 1);
101101// }
102- // }
103- // for (int k = 1; k <= unionCnt; k++) {
104- // undo();
105- // part++;
106- // }
107- // return ans;
102+ // }
103+ // for (int k = 1; k <= unionCnt; k++) {
104+ // undo();
105+ // part++;
106+ // }
107+ // return ans;
108108//}
109109//
110110//int main() {
111- // ios::sync_with_stdio(false);
112- // cin.tie(nullptr);
113- // cin >> n >> m;
114- // v = MAXV;
115- // for (int i = 1; i <= n; i++) {
116- // father[i] = i;
117- // siz[i] = 1;
118- // }
119- // for (int i = 1; i <= m; i++) {
120- // int x, y, w;
121- // cin >> x >> y >> w;
122- // if (w > 0) add(0, w - 1, x, y, 0, v, 1);
123- // add(w + 1, v, x, y, 0, v, 1);
124- // }
125- // part = n;
126- // cout << dfs(0, v, 1) << '\n';
127- // return 0;
111+ // ios::sync_with_stdio(false);
112+ // cin.tie(nullptr);
113+ // cin >> n >> m;
114+ // v = MAXV;
115+ // for (int i = 1; i <= n; i++) {
116+ // father[i] = i;
117+ // siz[i] = 1;
118+ // }
119+ // for (int i = 1; i <= m; i++) {
120+ // int x, y, w;
121+ // cin >> x >> y >> w;
122+ // if (w > 0) {
123+ // add(0, w - 1, x, y, 0, v, 1);
124+ // }
125+ // add(w + 1, v, x, y, 0, v, 1);
126+ // }
127+ // part = n;
128+ // cout << dfs(0, v, 1) << '\n';
129+ // return 0;
128130//}
0 commit comments