Submission #1146604

#TimeUsernameProblemLanguageResultExecution timeMemory
1146604TsaganaFlood (IOI07_flood)C++20
100 / 100
53 ms18368 KiB
#include<bits/stdc++.h>

#define IOS ios_base::sync_with_stdio(false);cin.tie();cout.tie();
#define all(x) x.begin(), x.end()
#define int long long
#define pq priority_queue
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define pp pop_back
#define F first
#define S second

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]].F;
		if (!k) continue ;
		
		adj[u][a[d][i]].F = 0;
		adj[k][(a[d][i] + 2) % 4].F = 0;
		
		int tmp = dfs(k, a[d][i]);
		
		if (tmp != -1) {if (tmp != u) {vis[u] = 0; return tmp;}}
		else {v.pb(adj[u][a[d][i]].S);}
	}
	vis[u] = 0;
	return -1;
}

void solve ()
{
	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].F.F - p[c].F.F;
		y = p[b].F.S - p[c].F.S;
		
		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(all(p));
	for (int i = 1; i <= n; i++) dfs(p[i].S, 0);
	cout << v.size() << '\n';

	for (int i: v) cout << i << '\n';
}
signed main() {IOS solve(); 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...