Submission #57870

#TimeUsernameProblemLanguageResultExecution timeMemory
57870MatheusLealVICC (CEOI16_icc)C++17
18 / 100
534 ms876 KiB
#include "icc.h"
#define N 105
#include <bits/stdc++.h>
using namespace std;
 
set<int> grafo[N];
 
int pai[N], peso[N];
 
int Find(int x)
{
    if(x == pai[x]) return x;
 
    return pai[x] = Find(pai[x]);
}
 
void join(int a, int b)
{
    a = Find(a), b = Find(b);
 
    if(a == b) return;
 
    if(peso[a] > peso[b]) pai[b] = a;
 
    else if(peso[a] < peso[b]) pai[a] = b;
 
    else pai[a] = b, peso[b] ++; 
}
 
void run(int n)
{
    for(int i = 1; i <= n; i++)
    {
        pai[i] = i;
    }
 
    for(int i = 1; i < n; i++)
    {
        vector<int> ok;

        vector<int> valores;

        for(int a = 1; a <= n; a++) valores.push_back(a);

        random_shuffle(valores.begin(), valores.end());
 
        for(auto a: valores)
        {
            int esq[N], dir[N], id = 0;

            if(ok.size() >= 2 or (ok.size() == 1 and Find(a) == Find(ok[0]))) continue;
 
            esq[0] = a;
 
            for(int b = 1; b <= n; b++)
            {
                if(Find(a) != Find(b))
                {
                    dir[id] = b;
 
                    id ++;
                }
            }
 
            if(query(1, id, esq, dir) > 0)
            {
                ok.push_back(a);
            }
        }
 
        join(ok[0], ok[1]);
 
 
        //cout<<i<<" "<<ok.size()<<" "<<" ROAD "<<ok[0]<<" "<<ok[1]<<"\n";
        setRoad(ok[0], ok[1]);
    }
}
 
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...