#include<bits/stdc++.h>
#include "game.h"
using namespace std;
int n,k;
vector<int> adjlist[300005];
vector<int> parlist[300005];
int max_source[300005];
int min_reach[300005];
bool ret=0;
void init(int N,int K){
n=N;
k=K;
for(int i=0;i<=k-2;i++){
adjlist[i].push_back(i+1);
parlist[i+1].push_back(i);
}
for(int i=0;i<=k-1;i++){
max_source[i]=i-1;
min_reach[i]=i+1;
}
min_reach[k-1]=1e9;
for(int i=k;i<=n-1;i++){
max_source[i]=-1;
min_reach[i]=1e9;
}
}
void update_source(int node,int a){
max_source[node]=max(max_source[node],a);
if(max_source[node]>=min_reach[node]){
ret=1;
return;
}
for(int child:adjlist[node]){
if(max_source[child]<a){
update_source(child,a);
}
}
}
void update_reach(int node,int a){
min_reach[node]=min(min_reach[node],a);
if(max_source[node]>=min_reach[node]){
ret=1;
return;
}
for(int child:parlist[node]){
if(min_reach[child]>a){
update_reach(child,a);
}
}
}
int add_teleporter(int u,int v){
adjlist[u].push_back(v);
parlist[v].push_back(u);
update_source(v,(u<=k-1?u:max_source[u]));
update_reach(u,(v<=k-1?v:min_reach[v]));
// for(int i=0;i<=n-1;i++) cout<<min_reach[i]<<' ';
// cout<<endl;
// for(int i=0;i<=n-1;i++) cout<<max_source[i]<<' ';
// cout<<endl<<endl;
return ret;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |