#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define _ <<' '<<
#define print(x) cout<<#x<<": "<<(x)<<'\n'
int n,m;
vector<vector<int>> adj;
vector<ll> s;
vector<int> res;
vector<array<ll, 2>> srt;
struct dsu{
int n;
vector<int> par;
vector<ll> sz;
dsu(const int n) {
this->n=n;
par.resize(n);
sz=s;
iota(par.begin(), par.end(), 0);
}
int find(const int i) {
if (par[i]==i) return i;
const auto p=par[i];
const auto d=find(par[i]);
if (!res[p]) res[i]=0;
return par[i]=d;
}
ll size(const int i) {
return sz[find(i)];
}
bool unite(int i, int j) {
i=find(i), j=find(j);
if (i==j) return false;
par[j]=i;
sz[i]+=sz[j];
return true;
}
};
bool bfs(const int st) {
priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<>> q;
vector<int> vis(n, 0);
ll cur=s[st];
for (const auto v:adj[st]) q.push({s[v], v});
vis[st]=1;
while (!q.empty()) {
const auto [d, u]=q.top();
q.pop();
if (vis[u]) continue;
vis[u]=1;
if (d>cur) return false;
cur+=d;
for (const auto v:adj[u]) if (!vis[v]) q.push({s[v], v});
}
return true;
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cout.tie(0);
cin>>n>>m;
adj.resize(n);
s.resize(n);
res.assign(n, 1);
srt.resize(n);
for (auto &e:s) cin>>e;
for (int i=0; i<m; i++) {
int a,b;
cin>>a>>b;
if (s[--a]>s[--b]) adj[a].push_back(b);
else adj[b].push_back(a);
}
for (int i=0; i<n; i++) {
srt[i][0]=s[i];
srt[i][1]=i;
}
sort(srt.begin(), srt.end());
int l=0, r=0, w=0;
dsu f(n);
while (l!=n) {
w=srt[l][0];
while (r<n-1 && srt[r+1][0]==w) ++r;
++r;
//cout<<l _ r<<'\n';
for (int i=l; i<r; ++i) {
for (const auto v:adj[srt[i][1]]) f.unite(srt[i][1], v);
}
if (r==n) break;
for (int i=l; i<r; i++) {
//cout<<i _ r _ f.size(srt[i][1]) _ srt[r][0]<<'\n';
if (f.size(srt[i][1])<srt[r][0]) res[srt[i][1]]=0;
}
l=r;
}
for (int i=0; i<n; i++) f.find(i);
for (const auto e:res) cout<<e;
cout<<'\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |