제출 #1284977

#제출 시각아이디문제언어결과실행 시간메모리
1284977Muhammad_AneeqIsland Hopping (JOI24_island)C++20
65 / 100
7 ms844 KiB
#include "island.h" #include "iostream" #include "bits/stdc++.h" using namespace std; int const MAXN=310; int vis[MAXN]={}; int val[MAXN][MAXN]={}; bool nei[MAXN][MAXN]={}; int deg[MAXN]={}; int par[MAXN]={}; int ask(int i,int j) { if (val[i][j]==0) val[i][j]=query(i,j); return val[i][j]; } int root(int n) { return (par[n]==n?n:par[n]=root(par[n])); } void merge(int u,int v) { u=root(u); v=root(v); par[v]=u; } void solve(int N, int L) { for (int i=1;i<=N;i++) par[i]=i; int cnt=0; for (int i=1;i<=N;i++) { int j=deg[i]+1; while (j<N&&cnt<N-1) { int z=ask(i,j); if (i==1&&j==1) { val[z][1]=1; } if (z<i) { break; } if (root(i)==root(z)) { j++; break; } if (ask(z,deg[z]+1)==i) { cnt++; nei[i][z]=1; merge(i,z); deg[i]++; deg[z]++; } else break; j++; } } set<pair<int,int>>ed; for (int i=1;i<=N;i++) { for (int j=i+1;j<=N;j++) if (nei[i][j]) ed.insert({i,j}); } for (auto [i,j]:ed) { // cout<<i<<' '<<j<<endl; answer(i,j); } }
#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...