Skip to content

Commit ff859d5

Browse files
committed
modify code
1 parent 84dcc06 commit ff859d5

File tree

1 file changed

+128
-0
lines changed

1 file changed

+128
-0
lines changed

src/class183/Code01_Ratio2.java

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package class183;
2+
3+
// 聪聪可可,C++版
4+
// 一共有n个节点,给定n-1条边,每条边有边权,所有节点组成一棵树
5+
// 如果点对(u, v)的简单路径权值和能被3整除,则称这个点对是合法的
6+
// 认为点对(x, x)的简单路径权值和是0,并且认为(x, y)和(y, x)是不同的点对
7+
// 打印(合法点对的数量 / 点对的总数量)的最简分数形式
8+
// 1 <= n、边权 <= 2 * 10^4
9+
// 测试链接 : https://www.luogu.com.cn/problem/P2634
10+
// 如下实现是C++的版本,C++版本和java版本逻辑完全一样
11+
// 提交如下代码,可以通过所有测试用例
12+
13+
//#include <bits/stdc++.h>
14+
//
15+
//using namespace std;
16+
//
17+
//const int MAXN = 20001;
18+
//int n;
19+
//
20+
//int head[MAXN];
21+
//int nxt[MAXN << 1];
22+
//int to[MAXN << 1];
23+
//int weight[MAXN << 1];
24+
//int cntg;
25+
//
26+
//bool vis[MAXN];
27+
//int siz[MAXN];
28+
//
29+
//int cur[3];
30+
//int all[3];
31+
//
32+
//int gcd(int a, int b) {
33+
// return b == 0 ? a : gcd(b, a % b);
34+
//}
35+
//
36+
//void addEdge(int u, int v, int w) {
37+
// nxt[++cntg] = head[u];
38+
// to[cntg] = v;
39+
// weight[cntg] = w;
40+
// head[u] = cntg;
41+
//}
42+
//
43+
//int getSize(int u, int fa) {
44+
// siz[u] = 1;
45+
// for (int e = head[u]; e > 0; e = nxt[e]) {
46+
// int v = to[e];
47+
// if (v != fa && !vis[v]) {
48+
// siz[u] += getSize(v, u);
49+
// }
50+
// }
51+
// return siz[u];
52+
//}
53+
//
54+
//int getCentroid(int u, int fa) {
55+
// int half = getSize(u, fa) >> 1;
56+
// bool find = false;
57+
// while (!find) {
58+
// find = true;
59+
// for (int e = head[u]; e > 0; e = nxt[e]) {
60+
// int v = to[e];
61+
// if (v != fa && !vis[v] && siz[v] > half) {
62+
// fa = u;
63+
// u = v;
64+
// find = false;
65+
// break;
66+
// }
67+
// }
68+
// }
69+
// return u;
70+
//}
71+
//
72+
//void dfs(int u, int fa, int dis) {
73+
// cur[dis % 3]++;
74+
// for (int e = head[u]; e > 0; e = nxt[e]) {
75+
// int v = to[e];
76+
// if (v != fa && !vis[v]) {
77+
// dfs(v, u, dis + weight[e]);
78+
// }
79+
// }
80+
//}
81+
//
82+
//int calc(int u) {
83+
// int ans = 0;
84+
// all[0] = all[1] = all[2] = 0;
85+
// for (int e = head[u]; e > 0; e = nxt[e]) {
86+
// int v = to[e];
87+
// int w = weight[e];
88+
// if (!vis[v]) {
89+
// cur[0] = cur[1] = cur[2] = 0;
90+
// dfs(v, u, w);
91+
// ans += all[0] * cur[0] * 2 + all[1] * cur[2] * 2 + all[2] * cur[1] * 2 + cur[0] * 2;
92+
// all[0] += cur[0];
93+
// all[1] += cur[1];
94+
// all[2] += cur[2];
95+
// }
96+
// }
97+
// return ans;
98+
//}
99+
//
100+
//int solve(int u) {
101+
// vis[u] = true;
102+
// int ans = calc(u);
103+
// for (int e = head[u]; e > 0; e = nxt[e]) {
104+
// int v = to[e];
105+
// if (!vis[v]) {
106+
// ans += solve(getCentroid(v, u));
107+
// }
108+
// }
109+
// return ans;
110+
//}
111+
//
112+
//int main() {
113+
// ios::sync_with_stdio(false);
114+
// cin.tie(nullptr);
115+
// cin >> n;
116+
// for (int i = 1, u, v, w; i < n; i++) {
117+
// cin >> u >> v >> w;
118+
// addEdge(u, v, w);
119+
// addEdge(v, u, w);
120+
// }
121+
// int a = solve(getCentroid(1, 0)) + n;
122+
// int b = n * n;
123+
// int c = gcd(a, b);
124+
// a /= c;
125+
// b /= c;
126+
// cout << a << "/" << b << '\n';
127+
// return 0;
128+
//}

0 commit comments

Comments
 (0)