Skip to content

Commit 68b4e79

Browse files
committed
modify code
1 parent 6ba39f2 commit 68b4e79

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

src/class165/Code04_TeamBuilding1.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,21 @@ public class Code04_TeamBuilding1 {
2626
public static int MAXN = 500001;
2727
public static int n, m, k;
2828

29+
// 每个节点的颜色
2930
public static int[] color = new int[MAXN];
31+
// 每条边有两个端点
3032
public static int[][] edge = new int[MAXN][2];
33+
34+
// 两个端点为不同颜色的边,u、ucolor、v、vcolor
3135
public static int[][] crossEdge = new int[MAXN][4];
36+
// 两个端点为不同颜色的边的数量
3237
public static int cnt = 0;
3338

39+
// conflict[i] = true,表示颜色为i的组,组内即便是二分图,也无法调和矛盾
40+
// conflict[i] = false,表示颜色为i的组,组内构成二分图,可以调和矛盾
3441
public static boolean[] conflict = new boolean[MAXN];
3542

43+
// 可撤销并查集
3644
public static int[] father = new int[MAXN << 1];
3745
public static int[] siz = new int[MAXN << 1];
3846
public static int[][] rollback = new int[MAXN << 1][2];
@@ -102,19 +110,20 @@ public static void filter() {
102110
public static long compute() {
103111
Arrays.sort(crossEdge, 1, cnt + 1, (a, b) -> a[1] != b[1] ? (a[1] - b[1]) : (a[3] - b[3]));
104112
long ans = (long) k * (k - 1) / 2;
113+
int u, ucolor, v, vcolor, unionCnt;
105114
for (int l = 1, r = 1; l <= cnt; l = ++r) {
106-
while (r + 1 <= cnt && crossEdge[r + 1][1] == crossEdge[l][1] && crossEdge[r + 1][3] == crossEdge[l][3]) {
115+
ucolor = crossEdge[l][1];
116+
vcolor = crossEdge[l][3];
117+
while (r + 1 <= cnt && crossEdge[r + 1][1] == ucolor && crossEdge[r + 1][3] == vcolor) {
107118
r++;
108119
}
109-
int u, ucolor, v, vcolor, unionCnt = 0;
120+
if (conflict[ucolor] || conflict[vcolor]) {
121+
continue;
122+
}
123+
unionCnt = 0;
110124
for (int i = l; i <= r; i++) {
111125
u = crossEdge[i][0];
112-
ucolor = crossEdge[i][1];
113126
v = crossEdge[i][2];
114-
vcolor = crossEdge[i][3];
115-
if (conflict[ucolor] || conflict[vcolor]) {
116-
break;
117-
}
118127
if (find(u) == find(v)) {
119128
ans--;
120129
break;

src/class165/Code04_TeamBuilding2.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
//
3636
//int color[MAXN];
3737
//int edge[MAXN][2];
38+
//
3839
//CrossEdge crossEdge[MAXN];
3940
//int cnt = 0;
4041
//
@@ -109,20 +110,20 @@
109110
//long long compute() {
110111
// sort(crossEdge + 1, crossEdge + cnt + 1, CrossEdgeCmp);
111112
// long long ans = (long long)k * (k - 1) / 2;
113+
// int u, ucolor, v, vcolor, unionCnt;
112114
// for (int l = 1, r = 1; l <= cnt; l = ++r) {
113-
// while (r + 1 <= cnt && crossEdge[r + 1].ucolor == crossEdge[l].ucolor
114-
// && crossEdge[r + 1].vcolor == crossEdge[l].vcolor) {
115+
// ucolor = crossEdge[l].ucolor;
116+
// vcolor = crossEdge[l].vcolor;
117+
// while (r + 1 <= cnt && crossEdge[r + 1].ucolor == ucolor && crossEdge[r + 1].vcolor == vcolor) {
115118
// r++;
116119
// }
117-
// int u, v, ucolor, vcolor, unionCnt = 0;
120+
// if (conflict[ucolor] || conflict[vcolor]) {
121+
// continue;
122+
// }
123+
// unionCnt = 0;
118124
// for (int i = l; i <= r; i++) {
119125
// u = crossEdge[i].u;
120-
// ucolor = crossEdge[i].ucolor;
121126
// v = crossEdge[i].v;
122-
// vcolor = crossEdge[i].vcolor;
123-
// if (conflict[ucolor] || conflict[vcolor]) {
124-
// break;
125-
// }
126127
// if (find(u) == find(v)) {
127128
// ans--;
128129
// break;

0 commit comments

Comments
 (0)