제출 #1356567

#제출 시각아이디문제언어결과실행 시간메모리
135656712345678Game (APIO22_game)C++20
2 / 100
2 ms476 KiB
#include "game.h"
#include <bits/stdc++.h>

using namespace std;

const int nx=3e5+5;

int n, k, l[nx], r[nx];
vector<int> in[nx], out[nx];

bool checknode(int u);

bool updateedge(int u, int v) // from u->v
{
    if (r[v]<=l[u]) return 1;
    int mdu=(l[u]+r[u])/2, mdv=(l[v]+r[v])/2;
    if (r[v]<=mdu)
    {
        r[u]=mdu;
        return checknode(u);
    }
    // if (mdv+1<=l[u])
    // {
    //     l[v]=mdv+1;
    //     return checknode(v);
    // }
    return 0;
}

bool checknode(int u)
{
    bool res=0;
    for (auto v:in[u]) res|=updateedge(v, u);
    for (auto v:out[u]) res|=updateedge(u, v);
    return res;
}

void init(int N, int K) {
    n=N;
    k=K;
    for (int i=1; i<=k; i++) l[i]=r[i]=i;
    for (int i=k+1; i<=n; i++) l[i]=0, r[i]=k+1;
}

int add_teleporter(int u, int v) {
    u++, v++;
    in[v].push_back(u);
    out[u].push_back(v);
    return updateedge(u, v);
}
#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...