#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define all(v) v.begin(), v.end()
vector<array<int, 4>> adj;
vector<array<int, 4>> adji;
vector<int> res;
vector<int> vis;
int strt = -1;
bool dfs(int a, int dir, int r){
for (int i = -1; i < 3; i++) {
int j = (i + dir + 4) % 4;
int b = adj[a][j];
if(b == strt){
if(vis[adji[a][j]] == r) res.push_back(adji[a][j]);
adj[a][j] = -1;
adj[b][(j + 2) % 4] = -1;
return 1;
}
if(b != -1){
if(vis[adji[a][j]] == r){
res.push_back(adji[a][j]);
adj[a][j] = -1;
adj[b][(j + 2) % 4] = -1;
}
vis[adji[a][j]] = r;
vis[adji[b][(j + 2) % 4]] = r;
if(dfs(b, j, r)){
adj[a][j] = -1;
adj[b][(j + 2) % 4] = -1;
return 1;
}
}
}
return 0;
}
int main()
{
int n; cin >> n;
vector<array<int, 3>> pos(n);
vector<int> pord(n);
adj.resize(n, {-1, -1, -1, -1}); //up, left, down, right
adji.resize(n, {-1, -1, -1, -1}); //up, left, down, right
for (int i = 0; i < n; i++){
cin >> pos[i][0] >> pos[i][1];
pos[i][2] = i;
}
int w; cin >> w;
vis.resize(w + 1, -1);
for (int i = 1; i <= w; i++) {
int a, b; cin >> a >> b; a--; b--;
if(pos[a][1] == pos[b][1]){
if(pos[a][0] > pos[b][0]){
adj[a][0] = b;
adj[b][2] = a;
adji[a][0] = i;
adji[b][2] = i;
}
else{
adj[a][2] = b;
adj[b][0] = a;
adji[a][2] = i;
adji[b][0] = i;
}
}
else{
if(pos[a][1] < pos[b][1]){
adj[a][3] = b;
adj[b][1] = a;
adji[a][3] = i;
adji[b][1] = i;
}
else{
adj[a][1] = b;
adj[b][3] = a;
adji[a][1] = i;
adji[b][3] = i;
}
}
}
sort(all(pos));
for (auto p : pos) {
if(adj[p[2]] == array<int, 4>({-1, -1, -1, -1})) continue;
for (int i = 0; i < 4; i++) {
if(adj[p[2]][i] != -1){
strt = p[2];
dfs(p[2], i, p[2]);
}
}
}
cout << res.size() << endl;
for (auto &&i : res)
cout << i << endl;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
1 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
37 ms |
1924 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
115 ms |
8764 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
82 ms |
4920 KB |
Output is correct |
2 |
Correct |
172 ms |
7020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
173 ms |
6724 KB |
Output is correct |
2 |
Correct |
201 ms |
6348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
174 ms |
6608 KB |
Output is correct |
2 |
Correct |
244 ms |
25232 KB |
Output is correct |