#include <bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define eb emplace_back
#define inf INT_MAX
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define FAR(i, a, b) for (int i = (a); i >= (b); i--)
#define all(x) x.begin(), x.end()
const int MOD = 1e9 + 7;
using namespace std;
int x[100007], y[100007];
int p[100007][4][2];
int lev[100007 * 4], vst[100007 * 4];
vector<int> adj[4 * 100007];
int xof[4 * 100007];
int n, w;
set<pair<int, int>> s;
int main()
{
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);
p[a][2][1] = i;
p[a][2][0] = i + w;
p[b][0][0] = i;
p[b][0][1] = i + w;
xof[i] = x[a];
s.insert({xof[i], i});
}
else
{
if (x[a] > x[b])
swap(a, b);
p[a][1][0] = i;
p[a][1][1] = i + w;
p[b][3][1] = i;
p[b][3][0] = i + w;
xof[i] = 100007;
}
}
for (int i = 1; i <= n; i++)
for (int j = 0; j < 4; j++)
if (p[i][j][1])
{
for (int k = (j + 1) % 4;; k = (k + 1) % 4)
if (p[i][k][0])
{
adj[p[i][j][1]].pb(p[i][k][0]);
adj[p[i][k][0]].pb(p[i][j][1]);
break;
}
}
for (int i = 1; i <= w; i++)
lev[i] = lev[i + w] = 100007;
while (1)
{
if (s.empty())
break;
int tmp = s.begin()->ss;
deque<int> q;
q.push_front(tmp);
lev[tmp] = 0;
while (q.size())
{
int x = q.front();
q.pop_front();
if (vst[x])
continue;
if (x <= w)
s.erase({xof[x], x});
vst[x] = 1;
for (int y : adj[x])
{
if (lev[y] > lev[x])
{
lev[y] = lev[x];
q.push_front(y);
}
}
adj[x].clear();
int k = (x > w ? x - w : x + w);
if (lev[k] > lev[x] + 1)
{
lev[k] = lev[x] + 1;
q.pb(k);
}
}
}
vector<int> ans;
for (int i = 1; i <= w; i++)
if (lev[i] == lev[i + w])
ans.pb(i);
cout << ans.size() << endl;
for (int x : ans)
cout << x << endl;
return 0;
}
# | 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... |