#include <bits/stdc++.h>
// meeeooowwwww mrrowwww :3
// go play vivid/stasis!! now!!!! https://vividstasis.gay
#define fo(i, a, b) for (auto i = (a); i < (b); i++)
#define of(i, a, b) for (auto i = (b); i-- > (a);)
#define f first
#define s second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define be(a) a.begin(), a.end()
using namespace std;
int ____init = []{
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
return 0;
}();
pair<int, int> p[100000];
pair<int, int> pe[100000][4];
int dsu[400000];
vector<int> dsd[400000];
int get(int i) {
if (i < 0 || dsu[i] == i) return i;
return dsu[i] = get(dsu[i]);
}
void merge(int i, int j) {
i = get(i), j = get(j);
if (i == j) return;
if (dsd[i].size() < dsd[j].size()) swap(i, j);
for (int k : dsd[j]) dsd[i].pb(k);
dsd[j].clear();
dsu[j] = i;
}
int main() {
int n; cin >> n;
fo(i, 0, n) cin >> p[i].f >> p[i].s, pe[i][0] = {-1, -1}, pe[i][1] = {-1, -1}, pe[i][2] = {-1, -1}, pe[i][3] = {-1, -1};
int mi = 0, my = 2000000;
int w; cin >> w;
fo(i, 0, w) {
int a, b; cin >> a >> b; a--, b--;
if (p[a].s == p[b].s) {
if (p[a].s < my) mi = i*2+1, my = p[a].s;
if (p[a].f > p[b].f) swap(a, b);
pe[a][2] = {i*2+1, i*2 };
pe[b][0] = {i*2 , i*2+1};
} else {
if (p[a].s > p[b].s) swap(a, b);
pe[a][3] = {i*2+1, i*2 };
pe[b][1] = {i*2 , i*2+1};
}
dsu[i*2 ] = i*2 ;
dsu[i*2+1] = i*2+1;
dsd[i*2 ].pb(i*2+1);
dsd[i*2+1].pb(i*2 );
}
fo(i, 0, n) {
fo(k, 0, 4)
if (pe[i][k].f != -1) {
int j = pe[i][k].s;
fo(l, 1, 5)
if (pe[i][(k + l) % 4].f != -1) {
merge(j, pe[i][(k + l) % 4].f);
j = pe[i][(k + l) % 4].s;
}
break;
}
}
set<int> res;
queue<int> q; q.push(get(mi)); dsu[get(mi)] = -1;
while (q.size()) {
int i = q.front(); q.pop();
for (int j : dsd[i]) {
int k = get(j);
if (k < 0) {
if (k == dsu[i]) res.insert(j / 2);
continue;
}
dsu[k] = dsu[i] - 1;
q.push(k);
}
}
cout << res.size() << endl;
for (int i : res) cout << i + 1 << endl;
}
| # | 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... |