Submission #1197697

#TimeUsernameProblemLanguageResultExecution timeMemory
1197697ivazivaConnecting Supertrees (IOI20_supertrees)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#include "supertrees.h"

using namespace std;

#define MAXN 1001

int N;
int parent[MAXN],siz[MAXN];
vector<vector<int>> adj;
vector<pair<int,int>> edges;
vector<int> korenovi;

int get(int node)
{
    if (parent[node]==node) return node;
    return get(parent[node]);
}

void unite(int node1,int node2)
{
    node1=get(node1),node2=get(node2);
    if (node1==node2) return;
    if (siz[node1]<siz[node2]) swap(node1,node2);
    parent[node2]=node1;siz[node1]+=siz[node2];
    adj[node1][node2]=adj[node2][node1];
}

bool check(std::vector<std::vector<int>> p)
{
    for (int node=0;node<N;node++)
    {
        int komp1=get(node);
        for (int sled=node+1;sled<N;sled++)
        {
            if (p[node][sled]!=0) continue;
            int komp2=get(sled);if (komp1==komp2) return false;
        }
    }
    return true;
}

int construct(std::vector<std::vector<int>> p)
{
    int N=p.size();adj[node].resize(N);
    for (int node=0;node<N;node++) {parent[node]=node;siz[node]=1;adj[node].resize(N);}
    for (int node1=0;node1<N;node1++)
    {
        for (int node2=node1+1;node2<N;node2++)
        {
            if (p[node1][node2]==3 or p[node1][node2]!=p[node2][node1]) return 0;
            if (p[node1][node2]==1) edges.push_back({node1,node2});
        }
    }
    for (pair<int,int> par:edges) unite(par.first,par.second);
    if (!check(p)) return 0;
    for (int node=0;node<N;node++) 
    {
        if (parent[node]!=node) continue;
        korenovi.push_back(node);
        for (int sled=node+1;sled<N;sled++)
        {
            if (parent[sled]==-1 and p[node][sled]!=0) return 0;
            if (parent[sled]==sled and p[node][sled]==2) korenovi.push_back(sled);
        }
        if (korenovi.size()==2) return 0;
        for (int koren:korenovi) parent[koren]=-1;
        for (int poz=0;poz<korenovi.size()-1;poz++) {int node1=korenovi[poz],node2=korenovi[poz+1];adj[node1][node2]=adj[node2][node1]=1;}
        int node1=korenovi[0],node2=korenovi[korenovi.size()-1];adj[node1][node2]=adj[node2][node1]=1;korenovi.clear();
    }
    for (int node=0;node<N;node++) adj[node][node]=0;
    build(adj);return 1;
}

Compilation message (stderr)

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:45:24: error: 'node' was not declared in this scope
   45 |     int N=p.size();adj[node].resize(N);
      |                        ^~~~