제출 #1062627

#제출 시각아이디문제언어결과실행 시간메모리
1062627damjandavkov게임 (IOI14_game)C++17
42 / 100
1095 ms4696 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > v;
vector<int> pa;
vector<vector<bool> > w;
vector<bool> wh;
int N;
int dfs(int i)
{
    int s = 1;
    random_shuffle(v[i].begin(), v[i].end());
    for (auto h : v[i])
    {
        if (!wh[h] && w[i][h])
        {
            pa[h] = i;
            wh[h] = 1;
            s += dfs(h);
        }
    }
    return s;
}
void initialize(int n)
{
    int i, j;
    N = n;
    v.resize(n);
    pa.resize(n);
    w.resize(n);
    wh.resize(n);
    for (i = 0; i < n; i++)
    {
        w[i].resize(n);
        for (j = 0; j < n; j++)
        {
            if (j == i)
                w[i][j] = 0;
            else
            {
                w[i][j] = 1;
                v[i].push_back(j);
            }
        }
    }
    for (i = 0; i < n; i++)
        wh[i] = 0;
    wh[0] = 1;
    pa[0] = 0;
    dfs(0);
}
int hasEdge(int u, int v)
{
    w[u][v] = w[v][u] = 0;
    if (pa[u] != v && pa[v] != u)
        return 0;
    int s = 0;
    s = rand() % N;
    for (int i = 0; i < N; i++)
        wh[i] = 0;
    wh[s] = 1;
    pa[s] = s;
    if (dfs(s) == N)
        return 0;
    w[u][v] = w[v][u] = 1;
    return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...