Submission #1155142

#TimeUsernameProblemLanguageResultExecution timeMemory
1155142Math4Life2020Island Hopping (JOI24_island)C++20
0 / 100
1 ms412 KiB
#include "island.h"
#include <bits/stdc++.h>
using namespace std;

using ll = int; using pii = pair<ll,ll>;

const ll Nm = 305;
ll f[Nm];

ll getf(ll x) {
    if (f[x]==x) {
        return x;
    }
    return (f[x]=getf(f[x]));
}

void fz(ll a, ll b) {
    a = getf(a); b = getf(b);
    f[a]=b;
}

set<pii> sans;

void ANS(ll a, ll b) {
    if (sans.find({a,b})!=sans.end()) {
        return;
    }
    sans.insert({a,b});
    sans.insert({b,a});
    answer(a+1,b+1);
    fz(a,b);
}

void solve(int N, int L) {
    for (ll i=0;i<N;i++) {
        f[i]=i;
    }
    ll x0[N];
    for (ll i=0;i<N;i++) {
        x0[i]=query(i+1,1)-1;
    }
    vector<bool> frz(N,0); //frozen?
    vector<bool> o2(N,0); //only round 2?
    vector<bool> odn(N,0);
    for (ll i=0;i<N;i++) {
        ANS(i,x0[i]);
        if (x0[x0[i]]==i) {
            if (i<x0[i]) {
                frz[i]=1;
                cout << "FREEZE i="<<i<<"\n";
                odn[x0[i]]=1;
            }
        } else if (x0[i]>i) {
            o2[i]=1;
            frz[i]=1;
            cout << "FREEZE i="<<i<<"\n";
        }
    }
    for (ll T=2;T<N;T++) {
        for (ll i=(N-1);i>=0;i--) {
            if (!frz[i] || (T==2 && o2[i])) {
                ll j = query(i+1,T)-1;
                if (odn[i] && j>i) {
                    frz[i]=1;
                    //cout << "FREEZE i="<<i<<"\n";
                    continue;
                }
                if (getf(i)!=getf(j)) {
                    ANS(i,j);
                } else {
                    if (sans.find({i,j})==sans.end()) {
                        frz[i]=1;
                        //cout << "FREEZE i="<<i<<"\n";
                    }
                }
                if (j>i) {
                    frz[i]=1;
                    //cout << "FREEZE i="<<i<<"\n";
                }
            }
        }
    }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...