제출 #1182524

#제출 시각아이디문제언어결과실행 시간메모리
1182524dugersurenFlood (IOI07_flood)C++20
100 / 100
88 ms18364 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<pair<pair<int, int> , int> > p;
pair<int, int> adj[100010][4];
bool vis[100010];
vector<int> v;
int xac = 0;
int a[4][4];
int n, w;

int dfs(int u, int d){
	if (vis[u]) return u;
	vis[u]=1;
	for (int i=0;i<4;i++){
		int k=adj[u][a[d][i]].first;
		if (!k) continue ;
		
		adj[u][a[d][i]].first = 0;
		adj[k][(a[d][i] + 2) % 4].first= 0;
		
		int tmp = dfs(k, a[d][i]);
		
		if (tmp != -1) {if (tmp != u) {vis[u] = 0; return tmp;}}
		else {v.push_back(adj[u][a[d][i]].second);}
	}
	vis[u] = 0;
	return -1;
}


signed main() {
	ios_base::sync_with_stdio(false);cin.tie();cout.tie();
	cin >> n;
	for (int i = 0; i < 4; i++)
	{
		a[i][1] = i;
		a[i][0] = (i + 1) % 4;
		a[i][2] = (i + 3) % 4;
		a[i][3] = (i + 2) % 4;
	}
	p.resize(n + 1);
	p[0] = {{-1, -1}, -1};
	for (int i = 1; i <= n; i++)
	{
		int x, y; cin >> x >> y;
		p[i] = {{x, y}, i};
	}
	cin >> w;
	for (int i = 1; i <= w; i++)
	{
		int c, b; cin >> c >> b;
		int d, x, y;
		x = p[b].first.first - p[c].first.first;
		y = p[b].first.second - p[c].first.second;
		
		if (x) d = (x > 0 ? 1 : 3);
		else d = (y > 0 ? 0 : 2);

		adj[c][d] = {b, i};
		adj[b][(d+2)%4] = {c, i};
	}
	sort(p.begin(),p.end());
	for (int i = 1; i <= n; i++) dfs(p[i].second, 0);
	cout << v.size() << '\n';

	for (int i: v) cout << i << '\n';
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...