Submission #679218

#TimeUsernameProblemLanguageResultExecution timeMemory
679218ziduoMag (COCI16_mag)C++14
96 / 120
423 ms223268 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second int vals[1000000]; int dp[1000000][2]; vector<int> edges[1000000]; pair<int, int> answer; void rec(int u, int p){ for(int v: edges[u])if(v!=p)rec(v, u); if(vals[u]>2){ dp[u][0] = 0; dp[u][1] = 0; return; } vector<int> use0; vector<int> use1; for(int v: edges[u])if(v!=p){ use0.push_back(dp[v][0]); use1.push_back(dp[v][1]); } sort(use0.begin(), use0.end()); sort(use1.begin(), use1.end()); reverse(use0.begin(), use0.end()); reverse(use1.begin(), use1.end()); if(vals[u]==2){ dp[u][0] = 0; if(use0.size()==0){ dp[u][1] = 1; answer.s=max(answer.s, 1); } else{ dp[u][1] = use0[0]+1; if(use0.size()==1) answer.s=max(answer.s,use0[0]+1); else answer.s=max(answer.s,use0[0]+1+use0[1]); } } else{ if(use0.size()==0){ dp[u][0] = 1; dp[u][1] = 0; answer.f=max(answer.f, 1); } else if(use0.size()==1){ dp[u][0] = use0[0]+1; dp[u][1] = use1[0]+1; answer.f=max(answer.f, dp[u][0]); answer.s=max(answer.s, dp[u][1]); } else{ dp[u][0] = use0[0]+1; dp[u][1] = use1[0]+1; answer.f=max(answer.f, use0[0]+use0[1]+1); answer.s=max(answer.s, use0[0]+use1[0]+1); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=0; i<n; i++)edges[i] = {}; for(int i=0; i<n-1; i++){ int u, v;cin>>u>>v;u--;v--; edges[u].push_back(v); edges[v].push_back(u); } answer.f=0; answer.s=0; for(int i=0; i<n; i++)cin>>vals[i]; rec(0, -1); if(answer.f==0&&answer.s==0){ int prin = vals[0]; for(int i=1; i<n; i++)prin = min(prin, vals[i]); cout<<prin<<"/1\n"; } else{ if(answer.f>answer.s/2) cout<<"1/"<<answer.f<<'\n'; else{ if(answer.s%2==0)cout<<"10000/"<<(answer.s/2)<<'\n'; else cout<<"2/"<<answer.s<<'\n'; } } 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...