제출 #162292

#제출 시각아이디문제언어결과실행 시간메모리
162292MohamedAhmed04Mag (COCI16_mag)C++14
0 / 120
523 ms140136 KiB
#include <bits/stdc++.h> using namespace std ; const int MAX = 1e6 + 10 ; vector< vector<int> >adj(MAX) ; int dp[MAX] , arr[MAX] ; int n ; int ans1 = 0 , ans2 = 0 ; void dfs(int node , int par) { int Max = 0 ; for(auto &child : adj[node]) { if(child == par) continue ; dfs(child , node) ; dp[node] += dp[child] ; if(dp[child] > Max) Max = dp[child] ; else if(dp[child] == Max && arr[node] == 2) ans2 = max(ans2 , Max*2+1) ; } if(arr[node] != 1) dp[node] = 0 ; ans1 = max(ans1 , dp[node]) ; return ; } int main() { ios_base::sync_with_stdio(0) ; cin.tie(0) ; cin>>n ; for(int i = 0 ; i < n-1 ; ++i) { int x , y ; cin>>x>>y ; adj[x].push_back(y) ; adj[y].push_back(x) ; } for(int i = 1 ; i <= n ; ++i) cin>>arr[i] ; int x = *min_element(arr+1 , arr + n+1) ; if(x != 1) return cout<<x<<"/"<<1<<"\n" , 0 ; dfs(1 , -1) ; if(ans1*2 < ans2) return cout<<ans2<<"/"<<2<<"\n" , 0 ; else return cout<<ans1<<"/"<<1<<"\n" , 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...