Submission #1190453

#TimeUsernameProblemLanguageResultExecution timeMemory
1190453anmattroiConnecting Supertrees (IOI20_supertrees)C++17
0 / 100
1 ms328 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
#define maxn 1005
using namespace std;

int par[maxn], n;
int find_set(int v) {
    return par[v] < 0 ? v : par[v] = find_set(par[v]);
}

void union_set(int u, int v) {
    u = find_set(u);
    v = find_set(v);
    if (u == v) return;
    if (par[u] < par[v]) swap(u, v);
    par[v] += par[u];
    par[u] = v;
}

map<int, vector<int> > nho;
vector<vector<int> > a;

int construct(vector<vector<int>> p) {
    n = p.size();
    fill(par, par+n, -1);

    for (int i = 0; i < n; i++)
    for (int j = i+1; j < n; j++)
    if (p[i][j]) union_set(i, j);

    for (int i = 0; i < n; i++)
    for (int j = i+1; j < n; j++)
    if (!p[i][j] && find_set(i) == find_set(j)) return 0;

    for (int i = 0; i < n; i++) nho[find_set(i)].emplace_back(i);

    for (auto [x, vi] : nho) a.push_back(vi);

    vector<vector<int> > ans(n, vector<int>(n, 0));

    for (auto &vi : a) {
        int mx = 0;
        for (int i = 0; i < vi.size(); i++)
        for (int j = i+1; j < vi.size(); j++)
        mx = max(mx, p[vi[i]][vi[j]]);

        if (mx == 1) {
            for (int i = 0; i < vi.size(); i++)
            for (int j = 0; j < vi.size(); j++)
            if (i != j) ans[vi[i]][vi[j]] = 1;
            continue;
        }

     }
     build(ans);
     return 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...