Submission #1203788

#TimeUsernameProblemLanguageResultExecution timeMemory
1203788LucaIlieIsland Hopping (JOI24_island)C++20
2 / 100
2 ms492 KiB
#include "island.h"
#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 300;
bool isEdge[MAX_N + 1][MAX_N + 1];
int parent[MAX_N + 1];
int comp;

int findParent(int x) {
    if (parent[x] == x)
        return x;
    parent[x] = findParent(parent[x]);
    return parent[x];
}

bool connected(int u, int v) {
    return findParent(u) == findParent(v);
}   

void connect(int u, int v) {
    u = findParent(u);
    v = findParent(v);
    if (u == v)
        return;
    comp--;
    parent[u] = v;
}

void solve(int n, int l) {
    vector<int> cand;
    for (int i = 1; i <= n; i++) {
        cand.push_back(i);
        parent[i] = i;
    }

    int round = 1;
    comp = n;
    while (round < n && comp > 1 && !cand.empty()) {
        vector<int> newCand;
        for (int u: cand) {
            int v = query(u, round);
            if (!isEdge[u][v] && connected(u, v))
                continue;
            isEdge[u][v] = isEdge[v][u] = true;
            connect(u, v);
            newCand.push_back(v);
        }
        round++;
    }

    for (int u = 1; u <= n; u++) {
        for (int v = u + 1; v <= n; v++) {
            if (isEdge[u][v]) {
                answer(u, v);
            }
        }
    }   
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...