제출 #1202871

#제출 시각아이디문제언어결과실행 시간메모리
1202871hengliao게임 (APIO22_game)C++20
60 / 100
1626 ms64516 KiB
#include "game.h" #include<bits/stdc++.h> using namespace std; #define F first #define S second #define pb push_back #define vll vector<ll> #define pll pair<ll, ll> typedef long long ll; namespace{ const ll mxN=3e4+5; const ll mxK=1005; const ll inf=1e18; vll adj[mxN]; vll rev[mxN]; ll N, K; bool visited1[mxN][mxK], visited2[mxN][mxK]; ll mn[mxN], mx[mxN]; void dfs1(ll cur, ll k){ if(visited1[cur][k]) return; visited1[cur][k]=1; mx[cur]=max(mx[cur], k); for(auto &it:adj[cur]){ dfs1(it, k); } } void dfs2(ll cur, ll k){ if(visited2[cur][k]) return; visited2[cur][k]=1; mn[cur]=min(mn[cur], k); for(auto &it:rev[cur]){ dfs2(it, k); } } } void init(int n, int k) { N=n; K=k; memset(visited1, 0, sizeof(visited1)); memset(visited2, 0, sizeof(visited2)); for(ll i=0;i<n;i++){ mx[i]=-inf; mn[i]=inf; } for(ll i=0;i<k-1;i++){ adj[i].pb(i+1); rev[i+1].pb(i); } for(ll i=0;i<k;i++){ dfs1(i, i); dfs2(i, i); } } int add_teleporter(int u, int v) { if(mx[u]>=mn[v]){ return 1; } adj[u].pb(v); rev[v].pb(u); for(ll i=0;i<K;i++){ if(visited1[u][i] && !visited1[v][i]){ dfs1(v, i); } if(visited2[v][i] && !visited2[u][i]){ dfs2(u, i); } } 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...