Skip to content

Commit af69d96

Browse files
committed
modify code
1 parent f022979 commit af69d96

File tree

2 files changed

+177
-9
lines changed

2 files changed

+177
-9
lines changed

src/class166/Code05_GreatIntegration1.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class Code05_GreatIntegration1 {
2020
public static int[] u = new int[MAXN];
2121
public static int[] v = new int[MAXN];
2222

23-
public static int[][] sorted = new int[MAXN][3];
23+
public static int[][] event = new int[MAXN][3];
2424

2525
public static int[] father = new int[MAXN];
2626
public static int[] siz = new int[MAXN];
@@ -114,19 +114,19 @@ public static void prepare() {
114114
siz[i] = 1;
115115
}
116116
for (int i = 1; i <= q; i++) {
117-
sorted[i][0] = u[i];
118-
sorted[i][1] = v[i];
119-
sorted[i][2] = i;
117+
event[i][0] = u[i];
118+
event[i][1] = v[i];
119+
event[i][2] = i;
120120
}
121-
Arrays.sort(sorted, 1, q + 1, (a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] != b[1] ? a[1] - b[1] : a[2] - b[2]);
121+
Arrays.sort(event, 1, q + 1, (a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] != b[1] ? a[1] - b[1] : a[2] - b[2]);
122122
for (int l = 1, r = 1; l <= q; l = ++r) {
123-
int x = sorted[l][0], y = sorted[l][1], t = sorted[l][2];
124-
while (r + 1 <= q && sorted[r + 1][0] == x && sorted[r + 1][1] == y) {
123+
int x = event[l][0], y = event[l][1], t = event[l][2];
124+
while (r + 1 <= q && event[r + 1][0] == x && event[r + 1][1] == y) {
125125
r++;
126126
}
127127
for (int i = l + 1; i <= r; i++) {
128-
add(t, sorted[i][2] - 1, x, y, 1, q, 1);
129-
t = sorted[i][2] + 1;
128+
add(t, event[i][2] - 1, x, y, 1, q, 1);
129+
t = event[i][2] + 1;
130130
}
131131
if (t <= q) {
132132
add(t, q, x, y, 1, q, 1);
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
package class166;
2+
3+
// 大融合,C++版
4+
// 测试链接 : https://www.luogu.com.cn/problem/P4219
5+
// 如下实现是C++的版本,C++版本和java版本逻辑完全一样
6+
// 提交如下代码,可以通过所有测试用例
7+
8+
//#include <bits/stdc++.h>
9+
//
10+
//using namespace std;
11+
//
12+
//struct Event {
13+
// int x, y, t;
14+
//};
15+
//
16+
//bool EventCmp(Event a, Event b) {
17+
// if (a.x != b.x) {
18+
// return a.x < b.x;
19+
// } else if (a.y != b.y) {
20+
// return a.y < b.y;
21+
// } else {
22+
// return a.t < b.t;
23+
// }
24+
//}
25+
//
26+
//const int MAXN = 100001;
27+
//const int MAXT = 3000001;
28+
//int n, q;
29+
//
30+
//int op[MAXN];
31+
//int u[MAXN];
32+
//int v[MAXN];
33+
//
34+
//Event event[MAXN];
35+
//
36+
//int father[MAXN];
37+
//int siz[MAXN];
38+
//int rollback[MAXN][2];
39+
//int opsize = 0;
40+
//
41+
//int head[MAXN << 2];
42+
//int nxt[MAXT];
43+
//int tox[MAXT];
44+
//int toy[MAXT];
45+
//int cnt = 0;
46+
//
47+
//long long ans[MAXN];
48+
//
49+
//void addEdge(int i, int x, int y) {
50+
// nxt[++cnt] = head[i];
51+
// tox[cnt] = x;
52+
// toy[cnt] = y;
53+
// head[i] = cnt;
54+
//}
55+
//
56+
//int find(int i) {
57+
// while (i != father[i]) {
58+
// i = father[i];
59+
// }
60+
// return i;
61+
//}
62+
//
63+
//void Union(int x, int y) {
64+
// int fx = find(x);
65+
// int fy = find(y);
66+
// if (siz[fx] < siz[fy]) {
67+
// int tmp = fx;
68+
// fx = fy;
69+
// fy = tmp;
70+
// }
71+
// father[fy] = fx;
72+
// siz[fx] += siz[fy];
73+
// rollback[++opsize][0] = fx;
74+
// rollback[opsize][1] = fy;
75+
//}
76+
//
77+
//void undo() {
78+
// int fx = rollback[opsize][0];
79+
// int fy = rollback[opsize--][1];
80+
// father[fy] = fy;
81+
// siz[fx] -= siz[fy];
82+
//}
83+
//
84+
//void add(int jobl, int jobr, int jobx, int joby, int l, int r, int i) {
85+
// if (jobl <= l && r <= jobr) {
86+
// addEdge(i, jobx, joby);
87+
// } else {
88+
// int mid = (l + r) >> 1;
89+
// if (jobl <= mid) {
90+
// add(jobl, jobr, jobx, joby, l, mid, i << 1);
91+
// }
92+
// if (jobr > mid) {
93+
// add(jobl, jobr, jobx, joby, mid + 1, r, i << 1 | 1);
94+
// }
95+
// }
96+
//}
97+
//
98+
//void dfs(int l, int r, int i) {
99+
// int unionCnt = 0;
100+
// for (int ei = head[i], fx, fy; ei > 0; ei = nxt[ei]) {
101+
// fx = find(tox[ei]);
102+
// fy = find(toy[ei]);
103+
// if (fx != fy) {
104+
// Union(fx, fy);
105+
// unionCnt++;
106+
// }
107+
// }
108+
// if (l == r) {
109+
// if (op[l] == 2) {
110+
// ans[l] = 1LL * siz[find(u[l])] * siz[find(v[l])];
111+
// }
112+
// } else {
113+
// int mid = (l + r) >> 1;
114+
// dfs(l, mid, i << 1);
115+
// dfs(mid + 1, r, i << 1 | 1);
116+
// }
117+
// for (int k = 1; k <= unionCnt; k++) {
118+
// undo();
119+
// }
120+
//}
121+
//
122+
//void prepare() {
123+
// for (int i = 1; i <= n; i++) {
124+
// father[i] = i;
125+
// siz[i] = 1;
126+
// }
127+
// for (int i = 1; i <= q; i++) {
128+
// event[i].x = u[i];
129+
// event[i].y = v[i];
130+
// event[i].t = i;
131+
// }
132+
// sort(event + 1, event + q + 1, EventCmp);
133+
// for (int l = 1, r = 1; l <= q; l = ++r) {
134+
// int x = event[l].x, y = event[l].y, t = event[l].t;
135+
// while (r + 1 <= q && event[r + 1].x == x && event[r + 1].y == y) {
136+
// r++;
137+
// }
138+
// for (int j = l + 1; j <= r; j++) {
139+
// add(t, event[j].t - 1, x, y, 1, q, 1);
140+
// t = event[j].t + 1;
141+
// }
142+
// if (t <= q) {
143+
// add(t, q, x, y, 1, q, 1);
144+
// }
145+
// }
146+
//}
147+
//
148+
//int main() {
149+
// ios::sync_with_stdio(false);
150+
// cin.tie(nullptr);
151+
// cin >> n >> q;
152+
// char t;
153+
// int x, y;
154+
// for (int i = 1; i <= q; i++) {
155+
// cin >> t >> x >> y;
156+
// op[i] = (t == 'A') ? 1 : 2;
157+
// u[i] = min(x, y);
158+
// v[i] = max(x, y);
159+
// }
160+
// prepare();
161+
// dfs(1, q, 1);
162+
// for (int i = 1; i <= q; i++) {
163+
// if (op[i] == 2) {
164+
// cout << ans[i] << '\n';
165+
// }
166+
// }
167+
// return 0;
168+
//}

0 commit comments

Comments
 (0)