Submission #1056369

#TimeUsernameProblemLanguageResultExecution timeMemory
1056369PiokemonThe Xana coup (BOI21_xanadu)C++17
100 / 100
35 ms17780 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; constexpr int N = 100'000; int a[N+9]; vector<int> graf[N+9]; ll dp[N+9][2][2]; ll dp2[N+9][2][2]; void dfs(int v, int par){ if (graf[v].size()==1 && v!=1){ dp[v][a[v]][0]=0; dp[v][1-a[v]][1]=1; dp[v][a[v]][1]=1e9; dp[v][1-a[v]][0]=1e9; return; } int nr=1; dp2[0][0][0]=0; dp2[0][0][1]=1e9; dp2[0][1][0]=0; dp2[0][1][1]=1e9; ll s0=0,s1=0; for (int x:graf[v]){ if (x==par)continue; dfs(x,v); } for (int x:graf[v]){ if (x==par)continue; for (int z=0;z<2;z++){ dp2[nr][z][0]=min(dp2[nr-1][z][0]+dp[x][z][0],dp2[nr-1][z][1]+dp[x][z][1]); dp2[nr][z][1]=min(dp2[nr-1][z][0]+dp[x][z][1],dp2[nr-1][z][1]+dp[x][z][0]); } nr++; } dp[v][0][0]=dp2[nr-1][0][a[v]]; dp[v][0][1]=dp2[nr-1][1][1-a[v]]+1; dp[v][1][0]=dp2[nr-1][0][1-a[v]]; dp[v][1][1]=dp2[nr-1][1][a[v]]+1; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,u,v; cin >> n; for (int x=1;x<n;x++){ cin >> u >> v; graf[u].push_back(v); graf[v].push_back(u); } for (int x=1;x<=n;x++){ cin >> a[x]; } dfs(1,-1); /*for (int x=1;x<=n;x++){ for (int y=0;y<2;y++){ for (int z=0;z<2;z++) cout << x << ' ' << y << ' ' << z << ' ' << dp[x][y][z] << '\n'; } cout << '\n'; }*/ ll temp = min(dp[1][0][0],dp[1][0][1]); if (temp>n) cout << "impossible\n"; else cout << temp << '\n'; return 0; }

Compilation message (stderr)

xanadu.cpp: In function 'void dfs(int, int)':
xanadu.cpp:22:8: warning: unused variable 's0' [-Wunused-variable]
   22 |     ll s0=0,s1=0;
      |        ^~
xanadu.cpp:22:13: warning: unused variable 's1' [-Wunused-variable]
   22 |     ll s0=0,s1=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...