Submission #1347318

#TimeUsernameProblemLanguageResultExecution timeMemory
1347318weedywelonGame (APIO22_game)C++20
2 / 100
0 ms412 KiB
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <limits.h>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <deque>
#include <map>
#include <chrono>
#include <random>
#include <bitset>
#include <tuple>
#include "game.h"
#define SZ(x) (LL)(x.size())
#define FR(i,a,b) for(LL i=(a);i<(b);++i)
#define FOR(i,n) FR(i,0,n)
#define FAST ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define A first
#define B second
#define mp(a,b) make_pair(a,b)
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef unsigned __int128 U128;
typedef __int128 I128;
typedef std::pair<int,int> PII;
typedef std::pair<LL,LL> PLL;
using namespace std;

int n,k;
const int MAXN=1003;
vector<int> adj[MAXN];
vector<int> radj[MAXN];
int l[MAXN], r[MAXN]; //leftmost one i can reach, rightmost one can reach i
bool can=false;

void dfs(int u){
	if (l[u]<=r[u]){
		can=true;
		return;
	}
	for (int v:adj[u]){
		if (r[u]>r[v]){
			r[v]=max(r[u],r[v]);
			dfs(v);
			if (can) return;
		}
	}
}

void rdfs(int u, int val){
	if (l[u]<=r[u]){
		can=true;
		return;
	}
	for (int v:radj[u]){
		if (l[v]>val){
			l[v]=min(l[v],val);
			rdfs(v,val);
			if (can) return;
		}
	}
}

void init(int N, int K) {
	n=N; 
	k=K;
	
	FOR(i,k){
		if (i==k-1) l[i]=n+1;
		else l[i]=i+1;
		r[i]=i;
	}
	FR(i,k,n){
		l[i]=n+1;
		r[i]=-1;
	}
	
	FOR(i,k-1){
		adj[i].push_back(i+1);
		radj[i+1].push_back(i);
	}
}

int add_teleporter(int u, int v) {
	if (u==v){
		if (u<k) return 1;
		else return 0;
	}
	adj[u].push_back(v);
	radj[v].push_back(u);
	
	int val=l[v];
	if (v<k) val=v;
	if (l[u]>val) rdfs(v,val);
	if (r[u]>r[v]) dfs(u);
	
	/*FOR(i,n) cout<<l[i]<<" ";
	cout<<"\n";
	FOR(i,n) cout<<r[i]<<" ";
	cout<<"\n";*/
	
	if (can) 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...