Submission #599497

#TimeUsernameProblemLanguageResultExecution timeMemory
599497DanerZeinGame (APIO22_game)C++17
60 / 100
4032 ms43464 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; typedef vector<int> vi; const int MAX_N=3e5+10; vector<vi> I; vector<vi> G; int fr[MAX_N]; int to[MAX_N]; int K,N; void init(int n, int k) { K=k; N=n; G.resize(n+1); I.resize(n+1); for(int i=0;i<=n;i++) fr[i]=1e9; memset(to,-1,sizeof to); } bool updateG(int u){ bool ans=0; if(to[u]>=fr[u]) return 1; for(auto &v:G[u]){ int val; if(u<K) val=u; else val=to[u]; if(to[v]<val){ to[v]=val; ans|=updateG(v); } } return ans; } bool updateI(int u){ bool ans=0; if(to[u]>=fr[u]) return 1; for(auto &v:I[u]){ int val; if(u<K) val=u; else val=fr[u]; if(val<fr[v]){ fr[v]=val; ans|=updateI(v); } } return ans; } int add_teleporter(int u, int v) { if(u<K && v<K){ if(u>=v) return 1; return 0; } G[u].push_back(v); I[v].push_back(u); if(u<K){ to[v]=max(to[v],u); } if(v<K){ fr[u]=min(fr[u],v); } /* for(int i=0;i<3;i++) cout<<to[i]<<" "; cout<<endl; for(int i=0;i<3;i++) cout<<fr[i]<<" "; cout<<endl;*/ bool s1=updateG(u)|updateG(v); bool s2=updateI(v)|updateI(u); return s1|s2; }
#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...