Submission #719942

#TimeUsernameProblemLanguageResultExecution timeMemory
719942vinnipuh01Stranded Far From Home (BOI22_island)C++17
100 / 100
604 ms72352 KiB
#include <iostream> #include <bits/stdc++.h> #include <cmath> #include <algorithm> #include <vector> #include <deque> #include <set> #include <stack> #include <string> #include <map> #include <queue> #define int long long #define sqrt sqrtl using namespace std; const long long oo = 1000000000000000000; long long sum, ans = 0, mx = 0, mn = 1000000000, num, pos; /* ViHHiPuh (( `'-""``""-'` )) )-__-_.._-__-( / --- (o _ o) --- \ \ .-* ( .0. ) *-. / _'-. ,_ '=' _, .-'_ / `;#'#'# - #'#'#;` \ \_)) -----'#'----- ((_/ # --------- # '# ------- ------ #' /..-'# ------- #'-.\ _\...-\'# -- #'/-.../_ ((____)- '#' -(____)) cout << fixed << setprecision(6) << x; ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); freopen ( "sum.in", "r", stdin ) */ int n, m, a[ 200001 ], x, y, p[ 200001 ], r[ 200001 ], c[ 200001 ]; int an[ 200001 ]; vector <int> v[ 200001 ], v1; vector <pair<int, pair<int, int> > > vv; map <int, vector <int> > mp; set <int> s[ 200001 ]; set <int> st, stt; int used[ 200001 ]; pair<int, int> fin( int a, int ans ) { if ( p[ a ] == a ) return { a, an[ a ] }; pair<int, int> pp = fin( p[ a ], 1 ); ans = an[ a ] & pp.second; p[ a ] = pp.first; an[ a ] = ans; return { p[ a ], ans }; } void unin( int a, int b ) { a = fin( a, an[ a ] ).first; b = fin( b, an[ b ] ).first; if ( a == b ) return; if ( ::a[ a ] < ::a[ b ] ) swap( a, b ); if ( r[ a ] < r[ b ] && ::a[ a ] <= ::a[ b ] ) swap( a, b ); r[ a ] += r[ b ]; c[ a ] += c[ b ]; p[ b ] = a; } main () { cin >> n >> m; for ( int i = 1; i <= n; i ++ ) { cin >> a[ i ]; an[ i ] = 1; p[ i ] = i; r[ i ] = 1; c[ i ] = a[ i ]; mp[ a[ i ] ].push_back( i ); st.insert( a[ i ] ); } for ( int i = 1; i <= m; i ++ ) { cin >> x >> y; if ( a[ x ] < a[ y ] ) swap( x, y ); vv.push_back( { a[ x ], make_pair( x, y ) } ); } sort( vv.begin(), vv.end() ); reverse( vv.begin(), vv.end() ); stt = st; for ( auto i : st ) { if ( stt.size() ) stt.erase( stt.begin() ); if ( stt.size() ) ans = *stt.begin(); else ans = 0; while ( vv.size() && vv.back().first <= i ) { num = fin( vv.back().second.second, an[ vv.back().second.second ] ).first; if ( c[ num ] < vv.back().first ) { an[ num ] = 0; } v[ vv.back().second.first ].push_back( vv.back().second.second ); v[ vv.back().second.second ].push_back( vv.back().second.first ); unin( vv.back().second.first, vv.back().second.second ); vv.pop_back(); } } for ( int i = 1; i <= n; i ++ ) { fin( i, an[ i ] ); cout << an[ i ]; } }

Compilation message (stderr)

island.cpp:80:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   80 | main () {
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...