제출 #1262084

#제출 시각아이디문제언어결과실행 시간메모리
1262084motion게임 (IOI14_game)C++20
42 / 100
128 ms13640 KiB
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int> p,s;
vector<map<int,int>> vec;

int FIND(int x)
{
    return p[x] == x ? x : (p[x] = FIND(p[x]));
}

void unite(int x,int y)
{
    int rx=FIND(x),ry=FIND(y);
    if(s[rx]<s[ry]) swap(rx,ry);
    s[rx]+=s[ry];
    p[ry]=rx;
    for(int i=0;i<n;i++)
    {
        if(i==rx || i==ry) continue;
        vec[i][rx]+=vec[i][ry];
    }
    for(auto [key,val]:vec[rx])
    {
        vec[rx][key]+=vec[ry][key];
    }

}

int hasEdge(int u,int v)
{
    int ru=FIND(u),rv=FIND(v);
    if(vec[ru][rv]==s[rv]*s[ru]-1)
    {
        unite(ru,rv);
        return 1;
    }
    else
    {
        vec[ru][rv]++;
        vec[rv][ru]++;
        return 0;
    }
}

void initialize(int k)
{
    n=k;
    s=vector<int>(n,1);
    vec=vector<map<int,int>>(n);
    for(int i=0;i<n;i++)
    {
        p.push_back(i);
    }
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...