#include <bits/stdc++.h>
using namespace std;
const int N=100100;
int X[N],Y[N],lev[N*4],side[N][4][2],vals[4*N];
bitset<4*N> vis;
vector<int> adj[4*N];
void AE(int a,int b){
adj[a].push_back(b);
adj[b].push_back(a);
}
set<pair<int,int>> st;
signed main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n,w;
cin>>n;
for(int i=1;i<=n;i++)cin>>X[i]>>Y[i];
cin>>w;
for(int i=1;i<=w;i++){
int a,b;
cin>>a>>b;
if(X[a]==X[b]){
if(Y[a]>Y[b])swap(a,b);
side[a][2][1]=i;
side[a][2][0]=i+w;
side[b][0][0]=i;
side[b][0][1]=i+w;
vals[i]=X[a];
st.insert({vals[i],i});
}else{
if(X[a]>X[b])swap(a,b);
side[a][1][0]=i;
side[a][1][1]=i+w;
side[b][3][1]=i;
side[b][3][0]=i+w;
vals[i]=1e9;
}
}
for(int i=1;i<=n;i++)
for(int j=0;j<4;j++)if(side[i][j][0])
for(int k=(j+1)%4;;k=(k+1)%4)
if(side[i][k][0]){
AE(side[i][k][0],side[i][j][1]);
break;
}
deque<int> Q;
memset(lev,7,sizeof lev);
while(1){
if(st.empty())break;
int K=st.begin()->second;
Q.push_back(K);
lev[K]=0;
while(Q.size()){
int x=Q.front();
Q.pop_front();
if(vis[x])continue;
if(x<=w)st.erase({vals[x],x});
vis[x]=1;
for(auto y:adj[x])
if(lev[y]<lev[x])Q.push_front(y),lev[y]=lev[x];
adj[x].clear();
int k=(x>w?x-w:x+w);
if(lev[k]>lev[x]+1)lev[k]=lev[x]+1,Q.push_back(k);
}
}
vector<int> a;
for(int i=1;i<=w;i++){
if(lev[i]==lev[i+w])a.push_back(i);
}
cout<<a.size()<<'\n';
for(auto x:a)cout<<x<<'\n';
}
# | 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... |
# | 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... |