Submission #1273570

#TimeUsernameProblemLanguageResultExecution timeMemory
1273570hgmhcGame (IOI14_game)C++20
42 / 100
1093 ms12880 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;

set<int> adj[1503];
int n;

void initialize(int _n) {
    n = _n;
    for(int i=0;i<n;++i) {
        for(int j=0;j<n;++j) {
            if(i!=j) {
                adj[i].insert(j);
            }
        }
    }
}

bool vis[1503];
int dfs(int s) {
    if(vis[s]) return 0;
    vis[s]=true;
    int r=1;
    for(auto u:adj[s]) {
        r+=dfs(u);
    }
    return r;
}

int hasEdge(int u, int v) {
    adj[u].erase(v);
    adj[v].erase(u);
    fill(vis, vis+1501, 0);
    int toured = dfs(0);
    
    cerr << toured << endl;
    
    if (toured < n) {
        // roll back
        adj[u].insert(v);
        adj[v].insert(u);
        return 1;
    }
    
    return 0;
}

// 남은 그래프가 분리되려고 하면 멈추고 yes.
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...