diff --git a/src/class183/Code01_Ratio1.java b/src/class183/Code01_Ratio1.java index dca87e2d..ee1cd300 100644 --- a/src/class183/Code01_Ratio1.java +++ b/src/class183/Code01_Ratio1.java @@ -25,9 +25,12 @@ public class Code01_Ratio1 { public static int[] weight = new int[MAXN << 1]; public static int cntg; + // vis[u] = true,表示u是之前的分治点 public static boolean[] vis = new boolean[MAXN]; public static int[] siz = new int[MAXN]; + // cur[v],表示往下走的当前路径中,路径权值和 % 3 == v的路径有多少条 + // all[v],表示往下走的所有路径中,路径权值和 % 3 == v的路径有多少条 public static int[] cur = new int[3]; public static int[] all = new int[3]; @@ -83,7 +86,7 @@ public static void dfs(int u, int fa, int dis) { } public static int calc(int u) { - int ans = 0; + int ans = 1; all[0] = all[1] = all[2] = 0; for (int e = head[u]; e > 0; e = nxt[e]) { int v = to[e]; @@ -101,8 +104,9 @@ public static int calc(int u) { } public static int solve(int u) { + int ans = 0; vis[u] = true; - int ans = calc(u); + ans += calc(u); for (int e = head[u]; e > 0; e = nxt[e]) { int v = to[e]; if (!vis[v]) { @@ -123,7 +127,8 @@ public static void main(String[] args) throws Exception { addEdge(u, v, w); addEdge(v, u, w); } - int a = solve(getCentroid(1, 0)) + n; + int centroid = getCentroid(1, 0); + int a = solve(centroid); int b = n * n; int c = gcd(a, b); a /= c; diff --git a/src/class183/Code01_Ratio2.java b/src/class183/Code01_Ratio2.java index f3c99fa6..ca8a1375 100644 --- a/src/class183/Code01_Ratio2.java +++ b/src/class183/Code01_Ratio2.java @@ -81,7 +81,7 @@ //} // //int calc(int u) { -// int ans = 0; +// int ans = 1; // all[0] = all[1] = all[2] = 0; // for (int e = head[u]; e; e = nxt[e]) { // int v = to[e]; @@ -99,8 +99,9 @@ //} // //int solve(int u) { +// int ans = 0; // vis[u] = true; -// int ans = calc(u); +// ans += calc(u); // for (int e = head[u]; e; e = nxt[e]) { // int v = to[e]; // if (!vis[v]) { @@ -119,7 +120,8 @@ // addEdge(u, v, w); // addEdge(v, u, w); // } -// int a = solve(getCentroid(1, 0)) + n; +// int centroid = getCentroid(1, 0); +// int a = solve(centroid); // int b = n * n; // int c = gcd(a, b); // a /= c; diff --git a/src/class183/Code02_Template1.java b/src/class183/Code02_Exist1.java similarity index 98% rename from src/class183/Code02_Template1.java rename to src/class183/Code02_Exist1.java index d5e855f1..5484d790 100644 --- a/src/class183/Code02_Template1.java +++ b/src/class183/Code02_Exist1.java @@ -1,6 +1,6 @@ package class183; -// 点分治模版题,java版 +// 距离为k的点对是否存在,java版 // 一共有n个节点,给定n-1条边,每条边有边权,所有节点组成一棵树 // 一共有m条查询,每条查询给定数字k,打印树上距离为k的点对是否存在 // 1 <= n <= 10^4 1 <= 边权 <= 10^4 @@ -13,7 +13,7 @@ import java.io.OutputStreamWriter; import java.io.PrintWriter; -public class Code02_Template1 { +public class Code02_Exist1 { public static int MAXN = 10001; public static int MAXM = 101; diff --git a/src/class183/Code02_Template2.java b/src/class183/Code02_Exist2.java similarity index 98% rename from src/class183/Code02_Template2.java rename to src/class183/Code02_Exist2.java index 5934f081..3be243bd 100644 --- a/src/class183/Code02_Template2.java +++ b/src/class183/Code02_Exist2.java @@ -1,6 +1,6 @@ package class183; -// 点分治模版题,C++版 +// 距离为k的点对是否存在,C++版 // 一共有n个节点,给定n-1条边,每条边有边权,所有节点组成一棵树 // 一共有m条查询,每条查询给定数字k,打印树上距离为k的点对是否存在 // 1 <= n <= 10^4 1 <= 边权 <= 10^4 diff --git a/src/class183/Code03_Race1.java b/src/class183/Code03_Race1.java index 6627eaca..72695dc9 100644 --- a/src/class183/Code03_Race1.java +++ b/src/class183/Code03_Race1.java @@ -194,9 +194,8 @@ public static int calc(int u) { } public static int solve(int u) { - int ans = INF; vis[u] = true; - ans = Math.min(ans, calc(u)); + int ans = calc(u); for (int e = head[u]; e > 0; e = nxt[e]) { int v = to[e]; if (!vis[v]) { diff --git a/src/class183/Code03_Race2.java b/src/class183/Code03_Race2.java index 94318192..d286b37e 100644 --- a/src/class183/Code03_Race2.java +++ b/src/class183/Code03_Race2.java @@ -111,9 +111,8 @@ //} // //int solve(int u) { -// int ans = INF; // vis[u] = true; -// ans = min(ans, calc(u)); +// int ans = calc(u); // for (int e = head[u]; e; e = nxt[e]) { // int v = to[e]; // if (!vis[v]) { diff --git a/src/class183/Code06_Maschera1.java b/src/class183/Code06_Maschera1.java index 9d0a1ad3..314f0b74 100644 --- a/src/class183/Code06_Maschera1.java +++ b/src/class183/Code06_Maschera1.java @@ -40,7 +40,8 @@ public class Code06_Maschera1 { // 讲解118,递归函数改成迭代所需要的栈 public static int[][] stack = new int[MAXN][5]; - public static int stacksize, u, f, maxv, edge, e; + public static int u, f, maxv, edge, e; + public static int stacksize; public static void push(int u, int f, int maxv, int edge, int e) { stack[stacksize][0] = u; diff --git a/src/class183/Code07_Message1.java b/src/class183/Code07_Message1.java index 9e5f16c1..3a37d281 100644 --- a/src/class183/Code07_Message1.java +++ b/src/class183/Code07_Message1.java @@ -45,7 +45,8 @@ public class Code07_Message1 { // 讲解118,递归函数改成迭代所需要的栈 public static int[][] stack = new int[MAXN][4]; - public static int stacksize, u, f, dep, e; + public static int u, f, dep, e; + public static int stacksize; public static void push(int u, int f, int dep, int e) { stack[stacksize][0] = u; diff --git a/src/class184/Code01_Capital1.java b/src/class184/Code01_Capital1.java index 3b0f8531..5678bebc 100644 --- a/src/class184/Code01_Capital1.java +++ b/src/class184/Code01_Capital1.java @@ -42,7 +42,8 @@ public class Code01_Capital1 { // 讲解118,递归函数改成迭代所需要的栈 public static int[][] stack = new int[MAXN][4]; - public static int stacksize, u, f, stamp, e; + public static int u, f, stamp, e; + public static int stacksize; public static void push(int u, int f, int stamp, int e) { stack[stacksize][0] = u;