Submission #1295472

#TimeUsernameProblemLanguageResultExecution timeMemory
1295472kawhietConnecting Supertrees (IOI20_supertrees)C++20
0 / 100
1 ms340 KiB
#include <bits/stdc++.h>
#include "supertrees.h"
using namespace std;

vector<int> cur;
vector<bool> vis;
vector<vector<int>> g;

void dfs(int u) {
    cur.push_back(u);
    vis[u] = 1;
    for (auto v : g[u]) {
        if (!vis[v]) {
            dfs(v);
        }
    }
}

int construct(vector<vector<int>> p) {
    int n = p.size();
    vis.resize(n);
    g.resize(n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (p[i][j] > 0) {
                g[i].push_back(j);
                g[j].push_back(i);
            }
        }
    }
    vector<vector<int>> comps;
    for (int i = 0; i < n; i++) {
        if (!vis[i]) {
            cur.clear();
            dfs(i);
            comps.push_back(cur);
        }
    }
    for (auto a : comps) {
        for (auto x : a) {
            for (auto y : a) {
                if (p[x][y] == 0) {
                    return 0;
                }
            }
        }
    }
    vector<vector<int>> ans(n, vector<int>(n));
    for (auto a : comps) {
        if (a.size() <= 2) {
            return 0;
        }
        for (int i = 1; i < a.size(); i++) {
            ans[a[i]][a[i - 1]] = 1;
            ans[a[i - 1]][a[i]] = 1;
        }
        ans[a.back()][a[0]] = 1;
        ans[a[0]][a.back()] = 1;
    }
    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...