Submission #431198

#TimeUsernameProblemLanguageResultExecution timeMemory
431198Rouge_HugoConnecting Supertrees (IOI20_supertrees)C++14
46 / 100
348 ms26084 KiB
#include<bits/stdc++.h>
#include "supertrees.h"
#include <vector>
#define fi first
#define se second
#define pb push_back
using namespace std;
int n;const int N=1009;
vector<vector<int>>ans;
int pa[N],sz[N],p[N][N],vis[N];
vector<int>v[N];vector<int>sta;
vector<int>u;
void merge(int x,int y)
{
    x=pa[x];y=pa[y];
    if(x==y)return;
    if(sz[x]<sz[y])swap(x,y);
    for(auto it:v[y])
    {
        sz[x]++;
        v[x].pb(it);
        pa[it]=x;
    }
}
int go(int x,int y)
{
    sta.clear();int last=x;
    for(auto it:v[x])sta.pb(it);
    for(int j=y+1;j<u.size();j++)
    {
        int i=u[j];
        if(vis[i])continue;
        int r=1,re=0;
        for(auto it:v[i])
        {
            for(auto pp:sta)
                if(p[it][pp]!=2)r=0;
        }
        if(r==0)continue;
        vis[i]=1;
        for(auto it:v[i])sta.pb(it);
        ans[last][i]=1;
        ans[i][last]=1;
        last=i;
    }
    if(ans[x][last])return 1;
    if(x==last)return 1;
    ans[x][last]=1;
    ans[last][x]=1;
    return 1;
}
vector<int>w;
int construct(vector<vector<int>> P) {
	n = P.size();
	for(int i=0;i<n;i++)
    {
        pa[i]=i;sz[i]=1;v[i].pb(i);
    }
	for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(i==j)continue;
            p[i][j]=P[i][j];
            if(p[i][j]==1)merge(i,j);
        }
    }
    for(int i=0;i<n;i++)w.pb(0);
    for(int i=0;i<n;i++)
    {
        ans.pb(w);
    }
	for(int i=0;i<n;i++)
    {
        if(pa[i]!=i)continue;
        for(auto it:v[i])
        {
            if(it==i)continue;
            ans[i][it]=1;
            ans[it][i]=1;
        }
        for(auto it:v[i])
        {
            for(auto pp:v[i])
            {
                if(it==pp)continue;
                //if(p[it][pp]!=1)return 0;
            }
        }
        u.pb(i);
    }
    for(int i=0;i<u.size();i++)
    {
        int it=u[i];
        if(vis[it])continue;
        vis[it]=1;
        int z=go(it,i);
        if(z==0)return 0;
    }
    build(ans);return 1;
}

Compilation message (stderr)

supertrees.cpp: In function 'int go(int, int)':
supertrees.cpp:29:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     for(int j=y+1;j<u.size();j++)
      |                   ~^~~~~~~~~
supertrees.cpp:33:17: warning: unused variable 're' [-Wunused-variable]
   33 |         int r=1,re=0;
      |                 ^~
supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:92:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |     for(int i=0;i<u.size();i++)
      |                 ~^~~~~~~~~
#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...