제출 #703253

#제출 시각아이디문제언어결과실행 시간메모리
703253MakarooniMag (COCI16_mag)C++17
120 / 120
891 ms182192 KiB
#include<bits/stdc++.h> using namespace std; #define pb(x) push_back(x) #define sz(x) (int)x.size() typedef long long ll; typedef long double ld; const int N = 1e6 + 10; const int inf = 1e9 + 1; vector<int> g[N]; int a[N], d[N], x[N], P, Q, d2[N]; void dfs2(int v, int p){ if(a[v] == 1) d[v] = 1; int mx1 = 0, mx2 = 0; for(int j = 0; j < sz(g[v]); j++){ int u = g[v][j]; if(u == p) continue; dfs2(u, v); if(a[u] != 1) continue; d[v] = max(d[v], d[u] + (a[v] == 1)); if(d[u] > mx1){ mx2 = mx1; mx1 = d[u]; } else if(d[u] > mx2) mx2 = d[u]; } x[v] = max(mx1 + mx2 + (a[v] == 1), d[v]); } void dfs3(int v, int p){ int mx1 = -1, mx2 = -1, V = -1; for(int j = 0; j < sz(g[v]); j++){ int u = g[v][j]; if(u == p) continue; if(a[u] == 1){ if(d[u] > mx1){ V = u; mx2 = mx1; mx1 = d[u]; } else if(d[u] > mx2) mx2 = d[u]; } if(a[v] == 1) d2[u] = max(d2[u], d2[v] + (a[v] == 1)); dfs3(u, v); } for(int j = 0; j < sz(g[v]); j++){ int u = g[v][j]; if(u == p) continue; int w = mx1; if(u == V) w = mx2; if(a[v] == 1) x[u] = max(x[u], w + (a[v] == 1) + d[u]); } x[v] = max(x[v], d2[v] + d[v]); } int main() { int n; cin >> n; int u, v; for(int i = 1; i < n; i++){ cin >> u >> v; g[u].pb(v); g[v].pb(u); } int mn = inf; for(int i = 1; i <= n; i++){ cin >> a[i]; mn = min(mn, a[i]); } if(mn != 1){ cout << mn << "/1"; return 0; } ld ans = 1; dfs2(1, 0); dfs3(1, 0); for(int i = 1; i <= n; i++){ ld tmp = ld(a[i]) / ld(x[i] + (a[i] != 1)); if(tmp < ans){ ans = tmp; P = a[i]; Q = x[i] + (a[i] != 1); } } int G = __gcd(P, Q); P /= G; Q /= G; cout << P << "/" << Q; }
#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...