Submission #577373

#TimeUsernameProblemLanguageResultExecution timeMemory
577373handlenameGame (APIO22_game)C++17
12 / 100
9 ms14424 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair const int MOD=1e9+7; int n,k; vector<int> adj[300001],rev[300001]; int l[300001],r[300001]; //leftmost special guy node i can reach //rightmost special guy who can reach node i //cycle iff exists l[i]<=r[i] void init(int N,int K){ n=N; k=K; for (int i=1;i<=k;i++){ if (i<k){ adj[i].pb(i+1); rev[i+1].pb(i); } l[i]=i; r[i]=i; } for (int i=k+1;i<=n;i++){ l[i]=n+1; r[i]=0; } } bool vis[300001]; void dfs0(int x,int val){ if (vis[x]) return; vis[x]=true; l[x]=min(l[x],val); for (auto i:rev[x]) dfs0(i,val); } void dfs1(int x,int val){ if (vis[x]) return; vis[x]=true; r[x]=max(r[x],val); for (auto i:adj[x]) dfs1(i,val); } int add_teleporter(int u,int v){ u++; v++; adj[u].pb(v); rev[v].pb(u); if (u==v) return 1; if (l[u]>=l[v]){ for (int i=1;i<=n;i++) vis[i]=false; dfs0(u,l[v]); for (int i=1;i<=k;i++){ if (l[i]<r[i]) return 1; } for (int i=k+1;i<=n;i++){ if (l[i]<=r[i]) return 1; } } if (r[u]>=r[v]){ for (int i=1;i<=n;i++) vis[i]=false; dfs1(v,r[u]); for (int i=1;i<=k;i++){ if (l[i]<r[i]) return 1; } for (int i=k+1;i<=n;i++){ if (l[i]<=r[i]) 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...