Submission #768182

#TimeUsernameProblemLanguageResultExecution timeMemory
768182green_gold_dogGame (APIO22_game)C++17
60 / 100
4035 ms121164 KiB
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
#include "game.h"
typedef int ll;

using namespace std;

vector<set<ll>> go_from, go_to;
vector<vector<bool>> go_from_k;
vector<bool> used;
vector<ll> be;
ll N, K;
bool b = false;

void init(int n, int k) {
	N = n;
	K = k;
	go_from_k.resize(n, vector<bool>(k, false));
	used.resize(n, false);
	go_from.resize(n);
	go_to.resize(n);
	for (ll i = 1; i < k; i++) {
		go_from[i].insert(i - 1);
		for (ll j = 0; j < i; j++) {
			go_from_k[i][j] = true;;
		}
	}
	for (ll i = 0; i < k - 1; i++) {
		go_to[i].insert(i + 1);
	}
}

void dfs(ll v, ll x) {
	if (go_from_k[v][x]) {
		return;
	}
	used[v] = true;
	be.push_back(v);
	if (v == x) {
		b = true;
		return;
	}
	go_from_k[v][x] = true;
	for (auto i : go_to[v]) {
		if (!used[i]) {
			dfs(i, x);
		}
	}
}

int add_teleporter(int u, int v) {
	go_from[v].insert(u);
	go_to[u].insert(v);
	for (ll i = 0; i < K; i++) {
		if (!go_from_k[u][i]) {
			continue;
		}
		dfs(v, i);
		for (auto v : be) {
			used[v] = false;
		}
		be.clear();
	}
	if (u < K) {
		dfs(v, u);
		for (auto v : be) {
			used[v] = false;
		}
		be.clear();
	}
	return b;
}

//int main() {
//	ll n, m, k;
//	cin >> n >> m >> k;
//	init(n, k);
//	for (ll i = 0; i < m; i++) {
//		ll a, b;
//		cin >> a >> b;
//		cout << add_teleporter(a, b) << '\n';
//	}
//}
#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...