This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int NMAX = 2e5;
pair<int, int> v[NMAX+1];
vector <int> edges[NMAX+1];
int parent[NMAX+1];
bool viz[NMAX+1];
int marked[NMAX+1];
ll sum[NMAX+1];
int findd( int x ) { // parintele si daca am marcat pe lant pana la radacina
if( parent[x] == x )
return x;
int sef = findd( parent[x] );
marked[x] |= marked[parent[x]];
parent[x] = sef;
return sef;
}
void unite( int a, int b ) {
int x = findd( a );
int y = findd( b );
if( x != y ) {
parent[x] = y;
sum[y] += sum[x];
}
}
void solve() {
int n, m, i, a, b;
cin >> n >> m;
for( i = 0; i < n; i++ ) {
cin >> v[i].first;
v[i].second = i;
parent[i] = i;
viz[i] = false;
sum[i] = v[i].first;
}
v[n].first = 0;
for( i = 0; i < m; i++ ) {
cin >> a >> b;
a--, b--;
edges[a].push_back( b );
edges[b].push_back( a );
}
sort( v, v + n );
for( i = 0; i < n; i++ ) {
viz[v[i].second] = true;
for( auto vec: edges[v[i].second] ) {
if( viz[vec] )
unite( vec, v[i].second );
}
int comp = findd( v[i].second );
if( sum[comp] < v[i+1].first )
marked[comp] = true;
}
for( i = 0; i < n; i++ )
a = findd( i );
for( i = 0; i < n; i++ )
cout << 1 - marked[i];
cout << "\n";
}
int main() {
//ios_base::sync_with_stdio( false );
//cin.tie( NULL );
//cout.tie( NULL );
int t = 1;
//cin >> t;
while( t-- )
solve();
return 0;
}
# | 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... |