Submission #731561

#TimeUsernameProblemLanguageResultExecution timeMemory
731561ogibogi2004Game (APIO22_game)C++17
60 / 100
4025 ms25020 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN=3e5+6;
const int SQ=600;
int min_nxt[MAXN];
vector<int>gr[MAXN];
int n,k;
void init(int _n, int _k) {
    n=_n;k=_k;
    for(int i=0;i<n;++i)
    {
        min_nxt[i]=n+1;
    }
}
bool set_min(int u,int val)
{
    min_nxt[u]=val;
    if(u<k&&min_nxt[u]<=u)return 1;
    for(auto xd:gr[u])
    {
        if(min_nxt[xd]>val)
        {
            bool flag=set_min(xd,val);
            if(flag==1)return 1;
        }
    }
    return 0;
}
void add_edge(int v,int u)
{
    if(gr[u].size()>SQ||gr[u].size()==0)
    {
        gr[v].push_back(u);
        return;
    }
    gr[v].push_back(u);
    for(auto xd:gr[u])gr[v].push_back(xd);
}
int add_teleporter(int u, int v) {
    add_edge(v,u);
    if(u<k&&v<k)
    {
        if(u>=v)return 1;
        else return 0;
    }
    if(v<k)
    {
        if(v>=min_nxt[u])
        {
            //add_edge(v,u);
            //gr[v].push_back(u);
            return 0;
        }
        bool flag=set_min(u,v);
        //gr[v].push_back(u);
        return flag;
    }
    else if(min_nxt[v]>=min_nxt[u])
    {
        //gr[v].push_back(u);
        return 0;
    }
    bool flag=set_min(u,min_nxt[v]);

    //gr[v].push_back(u);
    return flag;
}
#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...