Submission #820034

#TimeUsernameProblemLanguageResultExecution timeMemory
820034MohamedAhmed04The Xana coup (BOI21_xanadu)C++14
100 / 100
61 ms30192 KiB
#include <bits/stdc++.h> using namespace std ; const int MAX = 1e5 + 10 ; int arr[MAX] ; int n ; vector< vector<int> >adj(MAX) ; int vis[MAX][2] ; long long dp[MAX][2][2] ; void dfs(int node , int par , bool toggle) { if(vis[node][toggle]) return ; vis[node][toggle] = 1 ; dp[node][toggle][0] = dp[node][toggle][1] = n+1 ; int cur = arr[node] ^ toggle ; long long sum0 = 0 , sum1 = 1 ; vector<long long>v[2] ; for(auto &child : adj[node]) { if(child == par) continue ; dfs(child , node , 0) , dfs(child , node , 1) ; sum0 += dp[child][0][0] , sum1 += dp[child][1][0] ; v[0].push_back(dp[child][0][1] - dp[child][0][0]) ; v[1].push_back(dp[child][1][1] - dp[child][1][0]) ; } sort(v[0].begin() , v[0].end()) ; sort(v[1].begin() , v[1].end()) ; if((!cur)) dp[node][toggle][0] = sum0 ; else dp[node][toggle][1] = sum1 ; for(int i = 0 ; i < v[0].size() ; ++i) { sum0 += v[0][i] ; if((i+1) % 2 == cur) dp[node][toggle][0] = min(dp[node][toggle][0] , sum0) ; } for(int i = 0 ; i < v[1].size() ; ++i) { sum1 += v[1][i] ; if((i+1) % 2 != cur) dp[node][toggle][1] = min(dp[node][toggle][1] , sum1) ; } } 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] ; dfs(1 , -1 , 0) ; long long ans = min(dp[1][0][0] , dp[1][0][1]) ; if(ans > n) cout<<"impossible\n" ; else cout<<ans<<"\n" ; return 0 ; }

Compilation message (stderr)

xanadu.cpp: In function 'void dfs(int, int, bool)':
xanadu.cpp:39:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |  for(int i = 0 ; i < v[0].size() ; ++i)
      |                  ~~^~~~~~~~~~~~~
xanadu.cpp:45:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |  for(int i = 0 ; i < v[1].size() ; ++i)
      |                  ~~^~~~~~~~~~~~~
#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...