답안 #879464

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
879464 2023-11-27T13:42:10 Z vladburac Stranded Far From Home (BOI22_island) C++17
0 / 100
234 ms 21096 KB
#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;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 8536 KB Output is correct
2 Correct 1 ms 8540 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Incorrect 3 ms 8540 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 8536 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Incorrect 234 ms 20684 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 6492 KB Output is correct
2 Incorrect 200 ms 21096 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Incorrect 201 ms 20688 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 8536 KB Output is correct
2 Correct 1 ms 8540 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Incorrect 3 ms 8540 KB Output isn't correct
5 Halted 0 ms 0 KB -