제출 #1199480

#제출 시각아이디문제언어결과실행 시간메모리
1199480user149게임 (APIO22_game)C++20
60 / 100
4062 ms42680 KiB
#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 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...