/*#include "island.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int NASA=1000;
// vector<int> qry[N];
bool vis[NASA];
int limit_n;
set<pair<ll,ll>> edg;
void dfs(int x,int p=-1)
{
vis[x]=1;
// int sz=1;
for(int k=1;k<=limit_n-1;k++)
{
int y=query(x,k);
// cout<<"Queried "<<x<<' '<<k<<" got y: "<<y<<" vis: "<<vis[y]<<endl;
if(y==p)continue; // dont break on trying to visit parent
if(vis[y])break; // one of the grand child hehe!
// fuck maybe grand child does not exist
if(x<y)
{
edg.insert({x,y});
}
else{
edg.insert({y,x});
}
dfs(y,x);
}
}
void solve(int n, int l)
{
limit_n=n;
for(int i=1;i<=n;i++)vis[i]=0;
edg.clear();
dfs(1);
// for(int i=1;i<=n;i++)
// {
// qry[i].clear();
// for(int k=1;k<=min(l/n,n-1);k++)
// {
// qry[i].push_back(query(i,k));
// }
// }
// // neighbour of a vertex are a prefix of it qry vector
// set<pair<int,int>> edge;
// for(int i=1;i<=n;i++)
// {
// set<ll> cur;
// for(auto j:qry[i])
// {
// if(cur.find(j)!=cur.end())
// {
// break; // grandchild reached
// }
// if(i<j)
// {
// edge.insert({i,j});
// }
// else
// {
// edge.insert({j,i});
// }
// for(auto k:qry[j])
// {
// if(k!=i)
// {
// cur.insert(k);
// break;
// }
// }
// }
// }
if(edg.size()<(n-1))
{
exit(-1);
}
for(auto x:edg)
{
answer(x.first,x.second);
}
}*/
// /*
#include "island.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=500;
int par[N];
vector<int> qry[N],nei[N];
bool want[N][N];
int get(int x)
{
if(par[x]==x)return x;
return par[x]=get(par[x]);
}
vector<pair<int,int>> ans;
void merge(int x,int y)
{
int gx=x,gy=y;
// cout<<"trying "<<x<<' '<<y<<endl;
x=get(x);
y=get(y);
// cout<<"Comp "<<x<<' '<<y<<endl;
if(x!=y){ans.push_back({gx,gy});par[x]=y;}
}
void solve(int n, int l)
{
for(int i=1;i<=n;i++)
{
nei[i].clear();
qry[i].clear();
// cout<<"qry["<<i<<"]: ";
for(int k=1;k<=min(l/n,n-1);k++)
{
qry[i].push_back(query(i,k));
// cout<<qry[i].back()<<' ';
}
// cout<<endl;
}
// new algo
for(int i=1;i<=n;i++)
{
par[i]=i;
}
// for(int i=1;i<=n;i++)
// {
// merge(i,qry[i][0]); // deg[i]>0
// }
for(int j=0;j<n-1;j++)
{
for(int i=1;i<=n;i++)
{
if(want[qry[i][j]][i])
{
// cout<<"Both "<<i<<' '<<qry[i][j]<<endl;
merge(i,qry[i][j]);
}
// cout<<"i: "<<i<<" wants "<<qry[i][j]<<endl;
want[i][qry[i][j]]=1;
}
}
// cout<<"Final Edges"<<endl;
for(auto x:ans)
{
// cout<<x.first<<' '<<x.second<<endl;
answer(x.first,x.second);
}
return;
// neighbour of a vertex are a prefix of it qry vector
// grand childeren are subarray
// same goes on
// level-wise of tree when root is i is equal to qry[i]
set<pair<int,int>> edge;
for(int i=1;i<=n;i++)
{
set<ll> cur;
for(auto j:qry[i])
{
if(cur.find(j)!=cur.end())
{
break; // grandchild reached
}
if(i<j)
{
nei[i].push_back(j);
nei[j].push_back(i);
edge.insert({i,j});
}
else
{
nei[i].push_back(j);
nei[j].push_back(i);
edge.insert({j,i});
}
for(auto k:qry[j])
{
if(k!=i)
{
cur.insert(k);
break;
}
}
}
}
// if(edge.size()<(n-1))
// {
// for(int i=1;i<=n;i++)
// {
// set<ll> cur;
// for(auto j:qry[i])
// {
// if(cur.find(j)!=cur.end())
// {
// break; // grandchild reached
// }
// if(i<j)
// {
// // nei[i].push_back(j);
// // nei[j].push_back(i);
// edge.insert({i,j});
// }
// else
// {
// // nei[i].push_back(j);
// // nei[j].push_back(i);
// edge.insert({j,i});
// }
// for(auto k:nei[j]) // neighhbours of j such that they for sure have edge
// {
// cur.insert(k);
// }
// // for(auto k:qry[j])
// // {
// // if(k!=i)
// // {
// // cur.insert(k);
// // break;
// // }
// // }
// }
// }
// }
for(auto x:edge)
{
answer(x.first,x.second);
}
}
// */
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |