제출 #409750

#제출 시각아이디문제언어결과실행 시간메모리
409750shahriarkhanThe Xana coup (BOI21_xanadu)C++14
100 / 100
100 ms21568 KiB
#include<bits/stdc++.h> using namespace std ; const int INF = 1e9 , mx = 1e5 + 5 ; vector<int> adj[mx] ; long long dp[mx][2][2] ; int col[mx] ; void calc(int s , int p) { long long add1 = INF , add2 = INF , cnt1 = 0 , cnt2 = 0 , tot1 = 0 , tot2 = 0 ; for(int t : adj[s]) { if(t==p) continue ; calc(t,s) ; if(dp[t][0][1]<dp[t][0][0]) { ++cnt1 ; tot1 += dp[t][0][1] ; add1 = min(add1,dp[t][0][0] - dp[t][0][1]) ; } else { tot1 += dp[t][0][0] ; add1 = min(add1,dp[t][0][1] - dp[t][0][0]) ; } if(dp[t][1][1]<dp[t][1][0]) { ++cnt2 ; tot2 += dp[t][1][1] ; add2 = min(add2,dp[t][1][0] - dp[t][1][1]) ; } else { tot2 += dp[t][1][0] ; add2 = min(add2,dp[t][1][1] - dp[t][1][0]) ; } } dp[s][1][0] = tot1 ; dp[s][1][1] = tot2 + 1 ; dp[s][0][0] = tot1 ; dp[s][0][1] = tot2 + 1 ; if(!col[s]) { if(cnt1&1) dp[s][0][0] += add1 ; else dp[s][1][0] += add1 ; if(cnt2&1) dp[s][1][1] += add2 ; else dp[s][0][1] += add2 ; } else { if(cnt1&1) dp[s][1][0] += add1 ; else dp[s][0][0] += add1 ; if(cnt2&1) dp[s][0][1] += add2 ; else dp[s][1][1] += add2 ; } return ; } int main() { int n ; scanf("%d",&n) ; for(int i = 1 ; i < n ; ++i) { int a , b ; scanf("%d%d",&a,&b) ; adj[a].push_back(b) ; adj[b].push_back(a) ; } for(int i = 1 ; i <= n ; ++i) scanf("%d",&col[i]) ; calc(1,0) ; long long ans = min(dp[1][0][0],dp[1][0][1]) ; if(ans>=INF) puts("impossible") ; else printf("%lld\n",ans) ; return 0 ; }

컴파일 시 표준 에러 (stderr) 메시지

xanadu.cpp: In function 'int main()':
xanadu.cpp:66:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |     scanf("%d",&n) ;
      |     ~~~~~^~~~~~~~~
xanadu.cpp:70:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   70 |         scanf("%d%d",&a,&b) ;
      |         ~~~~~^~~~~~~~~~~~~~
xanadu.cpp:74:40: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |     for(int i = 1 ; i <= n ; ++i) scanf("%d",&col[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...