제출 #587387

#제출 시각아이디문제언어결과실행 시간메모리
587387mohammad_kilaniGame (APIO22_game)C++17
60 / 100
4026 ms42544 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;

#define oo 1000000010

vector< vector< int >  > g , g2;

vector< int > mn , mx , last , last2;

int n , k;

void init(int n, int k) {
	::n = n;
	::k = k;
	g.resize(n);
	g2.resize(n);
	mn.resize(n);
	mx.resize(n);
	for(int i = 0 ;i < k;i++){
		mn[i] = mx[i] = i;
	}
	for(int i = k ;i < n;i++){
		mn[i] = oo;
		mx[i] = -oo;
	}
}

void CheckMax(int u){
	if(mx[u] == -oo) return;
	for(int i = 0 ;i < (int)g[u].size();i++){
		if(mx[g[u][i]] < mx[u]){
			mx[g[u][i]] = mx[u];
			CheckMax(g[u][i]);
		}
	}
}

void CheckMin(int u){
	if(mn[u] == oo) return;

	for(int i = 0 ;i < (int)g2[u].size();i++){
		if(mn[g2[u][i]] > mn[u]){
			mn[g2[u][i]] = mn[u];
			CheckMin(g2[u][i]);
		}
	}
}

int add_teleporter(int u, int v) {
	if(u < k && v < k){
		if(u >= v)
			return 1;
		return 0;
	}

	//mx[v] 

	g[u].push_back(v);
	if(mx[v] < mx[u])
		CheckMax(u);

	g2[v].push_back(u);
	if(mn[u] > mn[v])
		CheckMin(v);

	if(u < k) u = v;
	if(mn[u] <= mx[u] && (mx[u] != k)){
		return 1;
	}
	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...