#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define _ <<' '<<
#define print(x) cout<<#x<<": "<<(x)<<'\n'
int n,m,😭=42;
vector<vector<int>> adj;
vector<array<ll, 2>> s;
vector<int> idx, vis,res;
struct dsu{vector<list<int>> q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vector<int> par;
vector<ll> sm; dsu() {
par.resize(n);q.resize(n);
sm.resize(n); for (int i=0; i<n; i++) q[i].push_back(i);
iota(par.begin(), par.end(), 0);
for (int i=0; i<n; i++) sm[i]=s[i][0];
}int find(const int i) {if (par[i]==i) return i; return par[i]=find(par[i]);}bool unite(int i, int j) {j=find(j);if (s[i][0]>sm[j]) vis[j]=0;if ((i=find(i))==j) return false; if (vis[j]) q[i].splice(q[i].end(), q[j]);
vis[j]=0;sm[i]+=sm[j];par[j]=i;return 1;}//sgdfkjhkljgdasfhiouheatgr;okiuhvbcxopijqwerp[ou]
};
int main(){
cin.tie(0)->sync_with_stdio(0);
cout.tie(0);
cin>>n>>m;
adj.resize(n);
s.resize(n);
vis.assign(n, 1);
res.assign(n, 0);
for (int i=0; i<n; i++) {
cin>>s[i][0];
s[i][1]=i;
}
sort(s.begin(), s.end());
idx.resize(n);
for (int i=0; i<n; i++) idx[s[i][1]]=i;
for (int i=0; i<m; i++) {
int a,b;
cin>>a>>b;
a=idx[--a], b=idx[--b];
if (s[a]>s[b]) adj[a].push_back(b);
else adj[b].push_back(a);
}
dsu f;
for (int i=0; i<n; i++) {
const auto [d, j]=s[i];
for (const auto v:adj[i]) f.unite(i, v);
}
for (int i=0; i<n; i++) if (vis[i]) for (const auto e:f.q[i]) {
//cout<<i _ e _ s[e][1]<<'\n';
res[s[e][1]]=1;
}
//for (const auto e:vis) print(e);
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... |