Submission #1341410

#TimeUsernameProblemLanguageResultExecution timeMemory
1341410yuqziiCop and Robber (BOI14_coprobber)C++20
0 / 100
2 ms1348 KiB

#include <bits/stdc++.h>

using namespace std;

constexpr int MAXN = 500;

int n;
bool areal[MAXN][MAXN];

int start(int N, bool a[MAXN][MAXN]) {
	n = N;

	for (int u = 0; u < n; u++)
		for (int v = 0; v < n; v++)
			areal[u][v] = a[u][v];

	int deg[MAXN];
	for (int u = 0; u < n; u++)
		for (int v = 0; v < n; v++)
			deg[u] += a[u][v];

	queue<int> q;
	for (int u = 0; u < n; u++)
		if (deg[u] == 1) q.push(u);
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		for (int v = 0; v < n; v++) {
			if (!a[u][v]) continue;
			deg[v]--;
			if (deg[v] == 1) q.push(v);
			a[u][v] = false;
			a[v][u] = false;
		}
	}

	for (int u = 0; u < n; u++)
		for (int v = u + 1; v < n; v++)
			for (int w = v + 1; w < n; w++)
				if (a[u][v] && a[v][w] && a[w][u])
					a[u][v] = a[v][u] = a[v][w] = a[w][v] = a[w][u] = a[u][w] = false;
	
	array<array<int, MAXN>, MAXN> C4;
	for (auto& v : C4)
		v.fill(-1);

	for (int u = 0; u < n; u++) {
		for (int v = 0; v < n; v++) {
			if (!a[u][v]) continue;
			for (int w = v + 1; w < n; w++) {
				if (!a[u][w]) continue;

				int x = C4[v][w];
				if (x != -1)
					a[x][v] = a[v][x] = a[x][w] = a[w][x] = a[u][v] = a[v][u] = a[u][w] = a[w][u] = false;

				C4[v][w] = u;
			}
		}
	}

	for (int u = 0; u < n; u++)
		for (int v = u + 1; v < n; v++)
			if (a[u][v])
				return -1;

	return 0;
}

int nextMove(int r) {
	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...