#include<bits/stdc++.h>
using namespace std;
// #define int long long
#define ll long long
#define FOR(i, l, r) for(int i=l; i<=r; i++)
#define FOD(i, r, l) for(int i=r; i>=l; i--)
#define pii pair<int, int>
#define fi first
#define se second
const int MAXN=2e5+5;
const int oo=1e9+7;
const int mod=1e9+7;
const int base=31;
int n, m;
struct poin{
int x, y;
}a[MAXN];
struct canh{
int u, v, id;
}cc[MAXN];
map<pii, int> ax;
map<pii, int> ax2;
int hx[]={1, 0, -1, 0}, hy[]={0, 1, 0, -1};
int tt[MAXN][5];
vector<int> adj[MAXN];
set<int> s;
multiset<pii> ss;
int vis[MAXN];
void dfs(int u){
vis[u]=1;
for(auto v:adj[u]){
if(s.find(ax2[{u, v}])==s.end()){
ss.insert({a[u].x, a[u].y});
ss.insert({a[v].x, a[v].y});
s.insert(ax2[{u, v}]);
}
if(vis[v]) continue;
dfs(v);
}
}
int chk[MAXN];
void tinh(){
while(1){
if(s.empty()) break;
if(ss.empty()) break;
int u=ax[*ss.begin()];
while(1){
if(ss.empty()) break;
int ok=0;
for(auto v:adj[u]){
if(s.find(ax2[{u, v}])!=s.end()){
ok=1;
break;
}
}
if(!ok){
ss.erase(ss.begin());
}
else{
break;
}
}
if(ss.empty()) break;
int h=1;
map<pii, int> vst;
set<pii> hist;
while(1){
// cout << u << ' ';
int ok=1;
FOR(ii, ((h-1)%4+4)%4, ((h-1)%4+4)%4+3){
int i=ii%4;
int v=tt[u][i];
// cout << v << ' ';
if(v && s.find(ax2[{u, v}])!=s.end()){
// cout << v << ' ';
if(vst.find({u, v})!=vst.end()){
ok=1;
break;
}
vst[{u, v}]=1;
hist.insert({u, v});
u=v;
h=i;
ok=0;
break;
}
}
// cout << '\n';
if(ok) break;
}
int ok=1;
for(auto [u, v]:hist){
// cout << u << ' ' << v << '\n';
int id=ax2[{u, v}];
if(hist.find({v, u})==hist.end()){
chk[id]=1;
}
if(s.find(id)!=s.end()){
ss.erase(ss.find({a[u].x, a[u].y}));
ss.erase(ss.find({a[v].x, a[v].y}));
s.erase(s.find(id));
ok=0;
}
}
if(ok) break;
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// freopen("test.txt", "r", stdin);
// freopen("o1.out", "w", stdout);
if(fopen(".inp", "r")){
freopen(".inp", "r", stdin);
freopen(".out", "w", stdout);
}
cin >> n;
FOR(i, 1, n){
int x, y;
cin >> x >> y;
a[i]={x, y};
ax[{x, y}]=i;
}
cin >> m;
FOR(i, 1, m){
int u, v;
cin >> u >> v;
ax2[{u, v}]=i;
ax2[{v, u}]=i;
cc[i]={u, v, i};
adj[u].push_back(v);
adj[v].push_back(u);
FOR(_, 0, 1){
FOR(j, 0, 3){
if((a[v].x-a[u].x)*hx[j]>0 || (a[v].y-a[u].y)*hy[j]>0){
tt[u][j]=v;
break;
}
}
swap(u, v);
}
}
// FOR(i, 1, n){
// FOR(j, 0, 3){
// cout << tt[i][j] << ' ';
// }
// cout << '\n';
// }
FOR(i, 1, n){
if(!vis[i]){
s.clear();
ss.clear();
dfs(i);
tinh();
}
}
int ans=0;
vector<int> res;
FOR(i, 1, m){
if(!chk[i]){
ans++;
res.push_back(i);
}
}
cout << ans << '\n';
for(auto x:res){
cout << x << '\n';
}
return 0;
}
Compilation message (stderr)
flood.cpp: In function 'int main()':
flood.cpp:122:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
122 | freopen(".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~
flood.cpp:123:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
123 | freopen(".out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~| # | 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... |