Submission #167561

#TimeUsernameProblemLanguageResultExecution timeMemory
167561puppies_and_rainbowsMag (COCI16_mag)C++14
24 / 120
1656 ms155236 KiB
#include <bits/stdc++.h> using namespace std; int n; vector<int> adj[1000005]; int cac[1000005]; int a[1000005]; int ans=0; bool hv=false; void dfs(int node, int fa) { pair<int, int> ok={0, 0}; for(auto i:adj[node]) { if(i==fa) continue; dfs(i, node); if(cac[i]>=ok.first) { ok.second=ok.first; ok.first=cac[i]; } else if(cac[i]>ok.second) { ok.second=cac[i]; } } if(a[node]==1) { ans=max(ans, ok.first+ok.second+1); cac[node]=ok.first+1; } ans=max(ans, cac[node]); } signed main() { cin>>n; for(int i=1; i<n; i++) { int u, v; cin>>u>>v; adj[u].push_back(v); adj[v].push_back(u); } for(int i=1; i<=n; i++) { cin>>a[i]; if(a[i]==1) hv=true; } if(!hv) { cout<<*min_element(a+1, a+n+1)<<"/1"; return 0; } dfs(1, 1); cout<<"1/"<<ans; }
#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...