Submission #1362861

#TimeUsernameProblemLanguageResultExecution timeMemory
1362861hihi0908Game (APIO22_game)C++20
2 / 100
1 ms344 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;


vector<vector<int>> G, R;
int N, K;
vector<int> post;
vector<vector<int>> scc;


void dfs(int u, vector<bool> &vis){
	vis[u] = 1;
	for(int &v : G[u]){
		if(!vis[v])	dfs(v, vis);
	}

	post.push_back(u);
}

void rdfs(int u, vector<bool> &vis, int t){
	vis[u] = 1;
	scc[t].push_back(u);
	for(int v : R[u]){
		if(!vis[v]){
			rdfs(v, vis, t);
		}
	}
}
void init(int n, int k) {
	N = n, K = k;
	G.resize(n);
	R.resize(n);
	scc.resize(n);

	for(int i = 0; i < k - 1; i++){
		G[i].push_back(i + 1);
		R[i + 1].push_back(i);
	}
}

int add_teleporter(int u, int v) {
	int tin = 0;
	if(u == v && u < K)	return 1;
	if(u == v)	return 0;

	post.clear();
	for(int i = 0; i < N; i++)	scc[i].clear();


	G[u].push_back(v);
	R[v].push_back(u);

	vector<bool> vis(N, 0);
	for(int i = 0; i < N; i++){
		if(!vis[i])	dfs(i, vis);
	}

	vis.assign(N, 0);
	reverse(post.begin(), post.end());

	for(int i : post){
		if(!vis[i]){
			rdfs(i, vis, tin);
			tin++;
		}
	}


	for(int i = 0; i < tin; i++){
		int cnt = 0;
		for(int j : scc[i]){
			if(j < K){
				cnt++;
			}
		}

		if(cnt >= 2){
			return 1;
		}
	}


	return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...