Submission #701598

#TimeUsernameProblemLanguageResultExecution timeMemory
701598tamthegodMag (COCI16_mag)C++17
36 / 120
542 ms262144 KiB
// Make the best become better // No room for laziness #include<bits/stdc++.h> #define int long long #define pb push_back #define fi first #define se second using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int maxN = 1e6 + 5; const int mod = 1e9 + 7; const ll oo = 1e18; int n; int a[maxN]; vector<int> adj[maxN]; int f[maxN][2]; int res0 = 0, res1 = 0; void ReadInput() { cin >> n; for(int i=1; i<n; i++) { int u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } for(int i=1; i<=n; i++) cin >> a[i]; } void dfs(int u, int par) { if(u != 1 && adj[u].size() == 1) { if(a[u] == 1) f[u][0] = 1; return; } for(int v : adj[u]) { if(v == par) continue; dfs(v, u); } vector<pair<int, int>> vc0, vc1; for(int v : adj[u]) { if(v == par) continue; if(a[u] == 1) { f[u][0] = max(f[u][0], f[v][0] + 1); f[u][1] = max(f[u][1], f[v][1] + 1); } if(a[u] == 2) f[u][1] = max(f[u][1], f[v][1]); vc0.pb({f[v][0], v}); vc1.pb({f[v][1], v}); } sort(vc0.begin(), vc0.end(), greater<pair<int, int>>()); res0 = max(res0, f[u][0]); res1 = max(res1, f[u][1]); if(a[u] == 2 && vc0.size() > 1) res1 = max(res1, vc0[0].fi + vc0[1].fi); if(a[u] == 1 && vc0.size() > 1) res0 = max(res0, vc0[0].fi + vc0[1].fi + 1); if(a[u] == 1) { if(vc0[0].se != vc1[0].se) res1 = max(res1, vc0[0].fi + vc1[0].fi + 1); else { if(vc1.size() > 1) res1 = max(res1, vc0[0].fi + vc1[1].fi + 1); if(vc0.size() > 1) res1 = max(res1, vc0[1].fi + vc1[0].fi + 1); } } } void Solve() { int val = *min_element(a + 1, a + n + 1); if(val > 1) { cout << val << '/' << 1; return; } dfs(1, 0); pair<int, int> p = {2, res1 + 1}, q = {1, res0}; if(p.fi * q.se > q.fi * p.se) p = q; int t = __gcd(p.fi, p.se); p.fi /= t; p.se /= t; cout << p.fi << "/" << p.se; } int32_t main() { //freopen("sol.inp", "r", stdin); ios_base::sync_with_stdio(false); cin.tie(nullptr); ReadInput(); Solve(); }
#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...