제출 #1078942

#제출 시각아이디문제언어결과실행 시간메모리
1078942LIFStranded Far From Home (BOI22_island)C++14
10 / 100
1102 ms524288 KiB
#include<bits/stdc++.h> using namespace std; int n,m; int head[500005]; int cnt = 0; long long int a[500005]; int last[500005]; long long int siz[500005]; struct edg { int to; int next; }edge[500005]; void add(int x,int y) { cnt++; edge[cnt].to = y; edge[cnt].next = head[x]; head[x] = cnt; } void dfs(int now,int fa) { siz[now] = a[now]; for(int i=head[now];i!=0;i=edge[i].next) { int to = edge[i].to; if(to == fa)continue; dfs(to,now); siz[now] += siz[to]; } return; } void dfs2(int now,int fa) { if(siz[now] >= a[fa] && last[fa] == 1)last[now] = 1; for(int i=head[now];i!=0;i=edge[i].next) { int to = edge[i].to; if(to == fa)continue; dfs2(to,now); } return; } int main() { cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=m;i++) { int x,y; cin>>x>>y; add(x,y); add(y,x); } dfs(1,0); last[0] = 1; dfs2(1,0); for(int i=1;i<=n;i++)cout<<last[i]; cout<<endl; return 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...