Submission #1155095

#TimeUsernameProblemLanguageResultExecution timeMemory
1155095Math4Life2020Island Hopping (JOI24_island)C++20
2 / 100
2 ms468 KiB
#include "island.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<ll,ll>; map<pii,ll> LOG; ll QRY(ll v, ll k) { if (LOG.find({v,k})==LOG.end()) { LOG[{v,k}]=query(v+1,k); } return LOG[{v,k}]; } const ll Nm = 305; ll f[Nm]; ll getf(ll x) { if (f[x]==x) { return x; } f[x]=getf(f[x]); return f[x]; } void fz(ll a, ll b) { a = getf(a); b = getf(b); if (a!=b) { f[a]=b; } } set<pii> cedg; void ANS(ll x, ll y) { if (cedg.find({x,y})!=cedg.end()) { return; } cedg.insert({x,y}); cedg.insert({y,x}); answer(x+1,y+1); fz(x,y); } void solve(int N, int L) { ll f1[N]; for (ll i=0;i<N;i++) { f1[i]=QRY(i,1)-1; } vector<bool> frz(N,false); //frozen? vector<bool> flag(N,false); for (ll i=0;i<N;i++) { if (f1[i]<i && f1[f1[i]]!=i) { ANS(i,f1[i]); } else if (f1[i]<i && f1[f1[i]]==i) { ANS(i,f1[i]); ll a1 = QRY(i,2)-1; ll a2 = QRY(f1[i],2)-1; if (a1==a2) { assert(a1>f1[i]); flag[i]=1; flag[f[i]]=1; if (a1<i) { frz[f1[i]]=1; //ANS(i,a1); } else { frz[i]=1; frz[f1[i]]=1; } } } else if (f1[i]>i && f1[f1[i]]!=i) { ANS(f1[i],i); frz[i]=1; } else if (f1[i]>i && f1[f1[i]]==i) { //already covered } } for (ll T=2;T<N;T++) { for (ll i=(N-1);i>=0;i--) { if (!frz[i]) { ll j = QRY(i,T)-1; if (j<i) { if (cedg.find({i,j})==cedg.end()) { if (getf(i)==getf(j)) { frz[i]=1; } else { ANS(i,j); } } } else { if (cedg.find({i,j})==cedg.end()) { if (getf(i)==getf(j)) { frz[i]=1; } else { ANS(i,j); } } frz[i]=1; } } } } }
#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...