Submission #679234

#TimeUsernameProblemLanguageResultExecution timeMemory
679234VictorGame (APIO22_game)C++17
60 / 100
4090 ms23916 KiB
// #pragma GCC target ("avx,avx2,fma")
// #pragma GCC optimize ("Ofast,inline") // O1 - O2 - O3 - Os - Ofast
// #pragma GCC optimize ("unroll-loops")
#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b) for (int i = (a); i < (b); ++i)
#define per(i, a, b) for (int i = (b)-1; i >= (a); --i)
#define trav(a, x) for (auto &a : x)

#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
#define pb push_back
#define debug(x) cout << #x << " = " << x << endl

#define umap unordered_map
#define uset unordered_set

typedef pair<int, int> ii;
typedef pair<int, ii> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vi> vvi;

typedef long long ll;
typedef pair<ll, ll> pll;
typedef vector<ll> vll;
typedef vector<pll> vpll;

const int INF = 1'000'000'007;

#include "game.h"

vi graph[300005];
int max_reach[300005];
int N,K;
bool stop=0;

void dfs(int u) {
    //cout<<"u = "<<u<<" max_reach = "<<max_reach[u]<<endl;
    if(max_reach[u]>=u) {
        stop=1;
        return;
    }
    trav(v,graph[u]) if(max_reach[u]>max_reach[v]) {
        max_reach[v]=max_reach[u];
        dfs(v);
    }
}

void init(int n, int k) {
    N=n;
    K=k;
    memset(max_reach,-1,sizeof(max_reach));
}

int add_teleporter(int u, int v) {
    //cout<<"u = "<<u<<" v = "<<v<<endl;
    graph[u].pb(v);
    if(u<K) max_reach[v]=max(max_reach[v],u);
    max_reach[v]=max(max_reach[v],max_reach[u]);
    dfs(v);
    //cout<<endl;
    return stop;
}
/*
#include <cstdio>
#include <cstdlib>
#include <vector>
#include "game.h"

namespace {

int read_int() {
  int x;
  if (scanf("%d", &x) != 1) {
    fprintf(stderr, "Error while reading input\n");
    exit(1);
  }
  return x;
}

}  // namespace

int main() {
  int N = read_int();
  int M = read_int();
  int K = read_int();
  std::vector<int> u(M), v(M);
  for (int i = 0; i < M; ++i) {
    u[i] = read_int();
    v[i] = read_int();
  }

  init(N, K);
  int i;
  for (i = 0; i < M; ++i) {
    int answer = add_teleporter(u[i], v[i]);
    if (answer != 0 && answer != 1) {
      i = -1;
      break;
    } else if (answer == 1) {
      break;
    }
  }
  printf("%d\n", 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...