Submission #1345878

#TimeUsernameProblemLanguageResultExecution timeMemory
1345878nikaa123Stranded Far From Home (BOI22_island)C++20
0 / 100
68 ms9804 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define eb emplace_back
#define mp make_pair
#define pb push_back
#define pp pop_back
#define endl '\n'
#define ff first
#define ss second
#define stop exit(0)
#define sz(x) (int)x.size()
#define pause system("pause")
#define all(x) (x).begin(), (x).end()
#define deb(x) cout << #x << "-" << x << endl
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
 
typedef string str;
typedef long long ll;
typedef __int128_t int128;
typedef vector<int> vii;
typedef pair<int, int> pii;
 
const long long INF = LLONG_MAX;
const int inf = INT_MAX;
const int mod = 998244353;
const int MOD = 1000000007;
const int dx[] = {-1,0,1,0};
const int dy[] = {0,1,0,-1};
const long double PI = 2 * acos(0.0);
 
const int N = 2e5+5;

inline void test_case() {
    
    int n,m;
    cin >> n >> m;
    vii s(n+1,0);
    for (int i = 1; i <= n; i++) {
        cin >> s[i];
    }
    vector <pii> v;
    for (int i = 1; i <= m; i++) {
        int a,b;
        cin >> a >> b;
        if (s[a] > s[b]) swap(a,b);
        v.eb(a,b);
    }
    sort(all(v),[&](pii a, pii b){
        return max(s[a.ff],s[a.ss]) < max(s[b.ff],s[b.ss]);
    });
    vii id(n+1); iota(all(id),0);
    sort(all(id),[&](int a,int b) {
        return s[a] < s[b];
    });
    vii p(n+1,0);
    vii sum(n+1,0);
    for (int i = 1; i <= n; i++) p[i] = i, sum[i] = s[i];
    function<int(int)> f = [&](int x) {
        if (x == p[x]) return x;
        return (p[x] = f(p[x]));
    };
    auto merge = [&](int a, int b) {
        // cout << a << "       " << b << endl;
        a = f(a);
        b = f(b);
        if (a == b) return;
        if (sum[a] < sum[b]) return;
        // cout << a << " --- " << b << endl;
        p[b] = a;
        sum[a] += sum[b];
    };
    for (auto [a,b]:v) {
        merge(a,b);
    }
    int r = f(id[n]);
    // deb(id[n]);
    // deb(r);
    for (int i = 1; i <= n; i++) cout << (p[i] == r);
    cout << endl;

}
 
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T = 1;
    // cin >> T;
    while (T--) test_case();
    return 0;
}
#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...