Submission #310645

#TimeUsernameProblemLanguageResultExecution timeMemory
310645shivensinha4Mag (COCI16_mag)C++17
60 / 120
548 ms82168 KiB
#include <bits/stdc++.h> using namespace std; #define for_(i, s, e) for (int i = s; i < (int) e; i++) #define for__(i, s, e) for (ll i = s; i < e; i++) typedef long long ll; typedef vector<int> vi; typedef pair<int, int> ii; #define endl '\n' const int MXN = 1e6; const ll INF = 1e17; vi adj[MXN+1]; int chain[MXN+1], val[MXN+1], n; pair<ll, ll> ans = {INF, 1}; void update(ll nu, ll de) { ll g = __gcd(nu, de); pair<ll, ll> temp = {nu/g, de/g}; if (ans.first == INF) ans = temp; else if (temp.first*ans.second < ans.first*temp.second) ans = temp; } void dfs(int p, int parent) { stack<ii> s, ss; s.push({p, parent}); ss.push({p, parent}); while (s.size()) { p = s.top().first, parent = s.top().second; s.pop(); for (int i: adj[p]) if (i != parent) { s.push({i, p}); ss.push({i, p}); } } while (ss.size()) { p = ss.top().first, parent = ss.top().second; ss.pop(); for (int i: adj[p]) if (i != parent) { chain[p] = max(chain[p], chain[i]); } if (val[p] == 1) chain[p] += 1; else chain[p] = 0; } } void dfs2(int p, int parent, int pval) { stack<vi> s; s.push({p, parent, pval}); while (s.size()) { p = s.top()[0], parent = s.top()[1], pval = s.top()[2]; s.pop(); vi mx(2); for (int i: adj[p]) if (i != parent) { if (chain[i] >= mx[0]) mx = {chain[i], mx[0]}; else mx[1] = max(mx[1], chain[i]); } update(val[p], mx[0]+mx[1]+1); for (auto i: adj[p]) if (i != parent) s.push({i, p, val[p] == 1 ? max(pval, mx[0] == chain[i] ? mx[1] : mx[0])+1 : 0}); } } int main() { #ifdef shiven freopen("test.in", "r", stdin); #endif ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; for_(i, 0, n-1) { int a, b; cin >> a >> b; a -= 1; b -= 1; adj[a].push_back(b); adj[b].push_back(a); } for_(i, 0, n) cin >> val[i]; dfs(0, 0); dfs2(0, 0, 0); cout << ans.first << "/" << ans.second << endl; return 0; }
#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...