제출 #587381

#제출 시각아이디문제언어결과실행 시간메모리
587381mohammad_kilani게임 (APIO22_game)C++17
2 / 100
1 ms720 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; #define oo 1000000010 vector< vector< vector< int > > > g , g2; vector< int > mn , mx , last , last2; int n , k; void init(int n, int k) { ::n = n; ::k = k; g.resize(n , vector< vector< int > > (k + 1)); g2.resize(n , vector< vector< int > > (k + 1)); mn.resize(n); mx.resize(n); last.resize(n , 0); last2.resize(n , k); for(int i = 0 ;i < k;i++){ mn[i] = mx[i] = i; } for(int i = k ;i < n;i++){ mn[i] = k; mx[i] = k; } } void CheckMax(int u){ if(mx[u] == k) return; int i = k , node; while((i == k || i < mx[u])){ while((int)g[u][i].size() > 0){ node = g[u][i].back(); g[u][i].pop_back(); if(mx[node] != k && mx[node] >= mx[u]){ g[u][mx[node]].push_back(node); continue; } mx[node] = mx[u]; g[u][mx[node]].push_back(node); CheckMax(node); } i = last[u]; if(last[u] < mx[u]) last[u]++; } } void CheckMin(int u){ if(mn[u] == k) return; int i = k , node; while(i > mn[u]){ while((int)g2[u][i].size() > 0){ node = g2[u][i].back(); g2[u][i].pop_back(); if(mn[node] <= mn[u]){ g2[u][mn[node]].push_back(node); continue; } mn[node] = mn[u]; g2[u][mn[node]].push_back(node); CheckMin(node); } i = last2[u]; if(last2[u] > mn[u]) last2[u]--; } } int add_teleporter(int u, int v) { if(u < k && v < k){ if(u >= v) return 1; return 0; } //mx[v] if(mx[u] != k && (mx[v] < mx[u] || mx[v] == k)){ g[u][k].push_back(v); CheckMax(u); } else g[u][mx[v]].push_back(v); if(mn[u] > mn[v]){ g2[v][k].push_back(u); CheckMin(v); } else g2[v][mn[u]].push_back(u); if(mn[u] <= mx[u] && (mx[u] != k)) 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...