제출 #1097758

#제출 시각아이디문제언어결과실행 시간메모리
1097758vjudge1The Xana coup (BOI21_xanadu)C++17
100 / 100
34 ms17812 KiB
#include<iostream> #include<cstdio> #include<bitset> using namespace std; const int N=1e5+10,inf=0x3f3f3f3f; int cnt,hd[N],to[N<<1],nxt[N<<1]; void add(int u,int v){ ++cnt; to[cnt]=v; nxt[cnt]=hd[u]; hd[u]=cnt; } bitset<N>aa,used; int f[N][2][2],g[N][2][2]; void dfs(int p){ bool ju=1; int pre=0; used[p]=1; for(int i=hd[p];i;i=nxt[i]){ if(used[to[i]])continue; ju=0; dfs(to[i]); g[to[i]][0][0]=min(min(g[pre][0][0]+f[to[i]][0][0],inf),min(g[pre][0][1]+f[to[i]][1][0],inf)); g[to[i]][0][1]=min(min(g[pre][0][1]+f[to[i]][0][0],inf),min(g[pre][0][0]+f[to[i]][1][0],inf)); g[to[i]][1][0]=min(min(g[pre][1][0]+f[to[i]][0][1],inf),min(g[pre][1][1]+f[to[i]][1][1],inf)); g[to[i]][1][1]=min(min(g[pre][1][1]+f[to[i]][0][1],inf),min(g[pre][1][0]+f[to[i]][1][1],inf)); pre=to[i]; } if(ju){ f[p][0][0]=(aa[p]?inf:0); f[p][0][1]=(aa[p]?0:inf); f[p][1][0]=(aa[p]?1:inf); f[p][1][1]=(aa[p]?inf:1); }else{ f[p][0][0]=(aa[p]?g[pre][0][1]:g[pre][0][0]); f[p][0][1]=(aa[p]?g[pre][0][0]:g[pre][0][1]); f[p][1][0]=(aa[p]?min(g[pre][1][0]+1,inf):min(g[pre][1][1]+1,inf)); f[p][1][1]=(aa[p]?min(g[pre][1][1]+1,inf):min(g[pre][1][0]+1,inf)); } } int main(){ int n,u,v; scanf("%d",&n); for(int i=1;i<n;++i){ scanf("%d%d",&u,&v); add(u,v); add(v,u); } int oo; for(int i=1;i<=n;++i){ scanf("%d",&oo); aa[i]=(oo!=0); } g[0][0][1]=inf,g[0][1][1]=inf; dfs(1); if(f[1][0][0]>=inf&&f[1][1][0]>=inf){ printf("impossible"); }else{ printf("%d",min(f[1][0][0],f[1][1][0])); } }

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

xanadu.cpp: In function 'int main()':
xanadu.cpp:43:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   43 |  scanf("%d",&n);
      |  ~~~~~^~~~~~~~~
xanadu.cpp:45:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |   scanf("%d%d",&u,&v);
      |   ~~~~~^~~~~~~~~~~~~~
xanadu.cpp:51:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |   scanf("%d",&oo);
      |   ~~~~~^~~~~~~~~~
#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...