Submission #365365

#TimeUsernameProblemLanguageResultExecution timeMemory
365365FatihSolakMag (COCI16_mag)C++17
60 / 120
459 ms144108 KiB
#include <bits/stdc++.h> #define N 1000005 using namespace std; vector<int> adj[N]; int arr[N]; int down[N]; int up[N]; int maxi = 0,mini = 1e9; void dfs(int v,int p){ for(auto u:adj[v]){ if(u == p)continue; dfs(u,v); if(arr[u] == 1){ down[v] += down[u] + 1; } } } void dfs2(int v,int p){ if(arr[p] == 1){ up[v] = up[p] + 1; if(arr[v] == 1){ up[v] = max(up[v], down[p] - down[v]); } else up[v] = max(up[v], down[p]+1); } for(auto u:adj[v]){ if(u == p)continue; dfs2(u,v); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n; 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 >> arr[i]; } dfs(1,0); dfs2(1,0); for(int i=1;i<=n;i++){ if(arr[i] == 1){ maxi = max(maxi,2*(1+down[i]+up[i])); } if(arr[i] == 2){ maxi = max(maxi,1+down[i]+up[i]); } mini = min(mini,arr[i]); } if(maxi == 0){ cout << mini << "/"<<1; } else if(maxi & 1){ cout << 2 << "/" << maxi; } else cout << 1 << "/" << maxi/2; }
#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...