Submission #565607

#TimeUsernameProblemLanguageResultExecution timeMemory
565607shahriarkhanVillage (BOI20_village)C++14
50 / 100
110 ms31948 KiB
#include<bits/stdc++.h> using namespace std ; const int MX = 1e5 + 5 , INF = 1e9 + 5 ; int dp[MX][2] , mn[MX] ; vector<int> adj[MX] ; vector<pair<int,int> > pick[MX][2] ; void dfs(int s , int p) { int sum = 0 , good = 0 , leaf = 1 , rd = 0 , pos = 0 , idx = 0 ; dp[s][0] = 0 , dp[s][1] = INF ; for(int t : adj[s]) { if(t==p) continue ; dfs(t,s) , leaf = 0 ; dp[s][0] = min(dp[s][0] + dp[t][1] , INF) , pick[s][0].push_back({t,1}) ; if((dp[t][0]+2)<=dp[t][1]) { sum += dp[t][0] + 2 , pick[s][1].push_back({t,0}) , ++pos ; good = 1 ; } else { if(dp[t][0]<dp[t][1]) { rd = t ; idx = pos ; } sum += dp[t][1] , pick[s][1].push_back({t,1}) , ++pos; } } if(!leaf) { if(!good) { if(rd) { pick[s][1].erase(pick[s][1].begin()+idx) ; pick[s][1].push_back({rd,0}) ; sum -= dp[rd][1] ; sum += dp[rd][0] + 2 ; } else { pick[s][1][0].second = 2 ; sum += 2 ; } } dp[s][1] = sum ; } } void build(int s , int c) { if(c==2) c = 1 ; for(pair<int,int> p : pick[s][c]) { build(p.first,p.second) ; if(p.second!=1) swap(mn[p.first],mn[s]) ; } } int main() { int n ; scanf("%d",&n) ; for(int i = 1 ; i < n ; ++i) { int x , y ; scanf("%d%d",&x,&y) ; adj[x].push_back(y) ; adj[y].push_back(x) ; } for(int i = 1 ; i <= n ; ++i) { mn[i] = i ; } dfs(1,0) ; build(1,1) ; printf("%d %d\n",dp[1][1],1) ; for(int i = 1 ; i <= n ; ++i) { printf("%d ",mn[i]) ; } printf("\n") ; for(int i = 1 ; i <= n ; ++i) { printf("%d ",1) ; } printf("\n") ; return 0 ; }

Compilation message (stderr)

Village.cpp: In function 'int main()':
Village.cpp:70:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   70 |     scanf("%d",&n) ;
      |     ~~~~~^~~~~~~~~
Village.cpp:74:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |         scanf("%d%d",&x,&y) ;
      |         ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...