이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
const int NN=2e5+1;
long long node[NN];
int par[NN];
bitset<NN> ans;
int fp(int i){
if(i==par[i]) return i;
int p=fp(par[i]);
if(ans[i]) ans[i]=ans[par[i]];
par[i]=p;
return p;
}
struct edl
{
int a,b;
bool operator < (const edl &rhs) const{
return max(node[a],node[b])<max(node[rhs.a],node[rhs.b]);
}
};
vector<edl> v;
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
int n,m,a,b;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>node[i],par[i]=i;
while(m--){
cin>>a>>b;
v.push_back({a,b});
}
sort(v.begin(),v.end());
ans.set();
for(auto i:v){
int p1=fp(i.a);
int p2=fp(i.b);
if(p1==p2) continue;
// cout<<p1<<" "<<p2<<"\n";
if(node[p1]<node[p2]) swap(p1,p2);
if(node[p1]>node[p2]) ans[p2]=0;
par[p2]=p1;
node[p1]+=node[p2];
}
for(int i=1;i<=n;i++){
fp(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... |