Submission #1216515

#TimeUsernameProblemLanguageResultExecution timeMemory
1216515LeonidCukConnecting Supertrees (IOI20_supertrees)C++20
11 / 100
223 ms22184 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
vector<bool>vis;
void dfs(int i,vector<vector<int>>&p,vector<vector<int>>&res)
{
    int n=p.size();
    vis[i]=true;
    vector<int>ok;
    ok.push_back(i);
    for(int j=0;j<n;j++)
    {
        if(i==j)continue;
        if(p[i][j]==2&&vis[j]==0)
        {
            vis[j]=1;
            ok.push_back(j);
        }
    }
    ok.push_back(i);
    for(int j=1;j<ok.size();j++)
    {
        if(ok.size()==2)break;
        res[ok[j]][ok[j-1]]=1;
        res[ok[j-1]][ok[j]]=1;
    }
    for(int j=0;j<n;j++)
    {
        if(i==j)continue;
        if(p[i][j]==1&&vis[j]==0)
        {
            res[i][j]=1;
            res[j][i]=1;
            vis[j]=true;
            dfs(j,p,res);
        }
    }
}
int construct(vector<vector<int>> p)
{
    int n=p.size();
    vis.resize(n);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(p[i][j]==3)return 0;
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            for(int z=j+1;z<n;z++)
            {
                if(p[i][j]==1&&p[j][z]==1&&p[i][z]==0)return 0;
            }
        }
    }
    vector<vector<int>>res(n,vector<int>(n));
    for(int i=0;i<n;i++)
    {
        if(vis[i]==0)dfs(i,p,res);
    }
    build(res);
    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...