제출 #1323066

#제출 시각아이디문제언어결과실행 시간메모리
1323066simona1230Stranded Far From Home (BOI22_island)C++17
0 / 100
450 ms30272 KiB
#include<bits/stdc++.h> using namespace std; int n,m; pair<int,int> a[200001]; vector<int> v[200001]; int b[200001]; void read() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i].first; a[i].second=i; b[i]=a[i].first; } for(int i=1;i<=m;i++) { int x,y; cin>>x>>y; v[x].push_back(y); v[y].push_back(x); } } int p[200001]; int f(int i) { if(p[i]==i)return i; return f(p[i]); } void unite(int i,int j) { i=f(i); j=f(j); if(i==j)return; p[j]=p[i]; } vector<int> g[200001]; int in[200001]; void solve() { for(int i=1;i<=n;i++) p[i]=i; sort(a+1,a+n+1); for(int h=1;h<=n;h++) { int i=a[h].second; for(int j=0;j<v[i].size();j++) { int nb=v[i][j]; //cout<<i<<" ++ "<<nb<<endl; if(b[nb]<=b[i])unite(i,nb); } } for(int i=1;i<=n;i++) { if(i==p[i])continue; //cout<<i<<" - "<<p[i]<<endl; g[p[i]].push_back(i); in[i]++; } } int sz[200001]; void dfs(int i) { sz[i]=b[i]; for(int j=0;j<g[i].size();j++) { int nb=g[i][j]; dfs(nb); sz[i]+=sz[nb]; } } int ans[200001]; void dfsans(int i) { for(int j=0;j<g[i].size();j++) { int nb=g[i][j]; if(sz[nb]>=b[i]) { ans[nb]=1; dfsans(nb); } } } int main() { read(); solve(); int ver; for(int i=1;i<=n;i++) { //cout<<in[i]<<" "; if(in[i]==0) { ver=i; } } //cout<<endl; //cout<<"! "<<ver<<endl; dfs(ver); ans[ver]=1; dfsans(ver); for(int i=1;i<=n;i++) cout<<ans[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...