이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <unordered_set>
#define mp make_pair
#define ll long long int
using namespace std;
ll N, M;
vector<ll> link;
vector<ll> sizee;
vector<ll> realsizee;
vector<pair<ll,ll> > tosort;
vector<bool> vis;
vector<vector<ll> > adj;
vector<ll> v;
vector<bool> ans;
vector<ll> visiting;
vector<vector<ll> > tores;
map<ll,ll> neighbouring;
ll findd(ll x) {
while(x!=link[x]) {
x=link[x];
}
return x;
}
bool same(ll a, ll b) {
return findd(a)==findd(b);
}
void unite(ll a, ll b) {
a=findd(a);
b=findd(b);
if(sizee[b]>sizee[a]) swap(a,b);
sizee[a]+=sizee[b];
realsizee[a]+=realsizee[b];
link[b]=a;
}
void visit(ll x) {
if(vis[x]) return;
vis[x]=true;
visiting.push_back(x);
for(auto b : adj[x]) {
if(v[b]>v[x]) {
neighbouring[v[b]]=b;
} else if(v[b]==v[x]) {
visit(b);
}
if(v[b]<=v[x]) {
if(!same(x,b))
unite(x,b);
}
}
}
int main() {
cin>>N>>M;
adj.resize(N);
tores.resize(N);
tosort.resize(N);
vis.resize(N);
v.resize(N);
ans.resize(N);
for(ll i=0;i<N;i++) {
cin>>v[i];
tosort[i]=mp(v[i],i);
}
sort(tosort.begin(),tosort.end());
for(ll i=0;i<M;i++) {
ll a,b;
cin>>a>>b;
a--;
b--;
adj[a].push_back(b);
adj[b].push_back(a);
}
link.resize(N);
realsizee.resize(N);
sizee.assign(N,1);
for(ll i=0;i<N;i++) {
realsizee[i]=v[i];
link[i]=i;
}
for(ll i=0;i<N;i++) {
ll x=tosort[i].second;
if(!vis[x]) {
visit(x);
ll llsize = realsizee[findd(x)];
ll rrsize = sizee[findd(x)];
if(rrsize==N) {
for(auto el : visiting) {
ans[el]=1;
}
}
auto it = neighbouring.upper_bound(llsize);
if(it!=neighbouring.begin()) {
it=prev(it,1);
for(auto el : visiting) {
tores[(*it).second].push_back(el);
}
}
neighbouring.clear();
visiting.clear();
}
}
for(ll i=N-1;i>=0;i--) {
ll x = tosort[i].second;
if(!ans[x]) continue;
for(auto el : tores[x]) {
ans[el]=1;
}
}
for(ll i=0;i<N;i++) {
cout<<ans[i];
}
}
# | 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... |