제출 #715860

#제출 시각아이디문제언어결과실행 시간메모리
715860bin9638게임 (IOI14_game)C++17
42 / 100
1091 ms11012 KiB
#include<bits/stdc++.h>

#ifndef SKY
#include "game.h"
#endif // SKY

using namespace std;
#define N 1510
#define ll long long
#define ii pair<int,int>
#define fs first
#define sc second
#define pb push_back
#define iii pair<int,ii>

int n,ktr[N][N];

struct DSU
{
    int lab[N];
    vector<int>lis[N];

    void init()
    {
        memset(lab,-1,sizeof(lab));
        for(int i=0;i<n;i++)
            lis[i].pb(i);
    }

    int root(int u)
    {
        if(lab[u]<0)
            return u;
        return(lab[u]=root(lab[u]));
    }

    bool update(int u,int v)
    {
        u=root(u);
        v=root(v);
        int cnt=0;
        for(auto x:lis[u])
            for(auto y:lis[v])
                cnt+=(ktr[x][y]==0);
        if(cnt>1)
            return 0;
        if(lab[u]>lab[v])
            swap(u,v);
        lab[u]+=lab[v];
        lab[v]=u;
        for(auto y:lis[v])
            lis[u].pb(y);
        return 1;
    }
}T;


int hasEdge(int u, int v)
{
    int res=T.update(u,v);
    ktr[u][v]=ktr[v][u]=1;
    #ifdef SKY
    if(res==1)cout<<"YES\n";else cout<<"NO\n";
    #endif // SKY
    return res;
}

void initialize(int cc)
{
    n=cc;
    T.init();
    memset(ktr,0,sizeof(ktr));
    #ifdef SKY
    for(int i=1;i<=n*(n-1)/2;i++)
    {
        int u,v;
        cin>>u>>v;
        int cc=hasEdge(u,v);
    }
    #endif // SKY
}

#ifdef SKY
int main()
{
    freopen("A.inp","r",stdin);
    freopen("A.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    int n;
    cin>>n;
    initialize(n);
    return 0;
}
#endif // SKY
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...