Submission #660914

#TimeUsernameProblemLanguageResultExecution timeMemory
660914Trisanu_DasMag (COCI16_mag)C++17
0 / 120
1178 ms262144 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 1e6 + 10; vector<int> adj[maxn], len[maxn]; int a[maxn], dp[maxn]; int n; void add(int x, int t) { if (len[x][0] <= t) swap(len[x][0], t); len[x][1] = max(len[x][1], t); } int get(int x, int t=0) {return (a[x] == 1) * (len[x][t] + 1);} int dfs(int x, int p = 0) { len[x] = {0, 0}; for (int v : adj[x]) { if (v == p) continue; add(x, dfs(v, x)); } return get(x); } int dfs_root(int x, int p = 0) { if (p) { int l = (a[p] == 1) * get(p, len[p][0] == get(x)); add(x, l); } dp[x] = len[x][0] + len[x][1]; for (int v : adj[x]) { if (v == p) continue; dfs_root(v, x); } } int main() { cin >> n; for (int i = 1; i < n; i++) { int a, b; cin >> a >> b; adj[a].emplace_back(b); adj[b].emplace_back(a); } for (int i = 1; i <= n; ++i) cin >> a[i]; dfs(1); dfs_root(1); int x = -1, y = -1; for (int i = 1; i <= n; ++i) { if (x == -1 or x *1ll* (dp[i] + 1) > a[i] *1ll* y) { x = a[i]; y = dp[i] + 1; } } int g = __gcd(x, y); cout << x/g << '/' << y/g << '\n'; return 0; }

Compilation message (stderr)

mag.cpp: In function 'int dfs_root(int, int)':
mag.cpp:34:1: warning: no return statement in function returning non-void [-Wreturn-type]
   34 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...