Submission #1237636

#TimeUsernameProblemLanguageResultExecution timeMemory
1237636lunarecho슈퍼트리 잇기 (IOI20_supertrees)C++20
0 / 100
0 ms328 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long;

struct DSU {

    bool b = true;
    vector<int> parent;
    vector<vector<int>> ways;

    void init(int n)
    {
        parent.resize(n);
        ways.resize(n,vector<int>(n,0));
        for(int i=0;i<n;++i)
            parent[i] = i;
    }

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

    void unite(int a, int b)
    {
        int u = find(a);
        int v = find(b);
        if(u != v)
        {
            parent[u] = v;
            ways[a][b] = 1;
            ways[b][a] = 1;
        }
        else
        {
            b = false;
        }
    }

};


int construct(vector<vector<int>> p) {
	
	int n = p.size();
    if(n == 1)
    {
        build({{1}});
        return 1;
    }
    DSU d;
    d.init(n);
    for(int i=0;i<n;++i)
    {
        for(int j=i+1;j<n;++j)
        {
            if(p[i][j] == 1)
                d.unite(i,j);
        }
    }
    if(!d.b)
    {
        return 0;
    }
    d.ways[0][0] = 1;
    for(int i=0;i<n;++i)
    {
        if(p[i][i])
            d.ways[i][i] = 1;
    }
    for(int i=0;i<n;++i)
    {
        for(int j=i;j<n;++j)
        {
            if(p[i][j] != d.ways[i][j])
            {
                return 0;
            }
        }
    }
    build(d.ways);
    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...