Submission #403776

#TimeUsernameProblemLanguageResultExecution timeMemory
403776victoriadConnecting Supertrees (IOI20_supertrees)C++14
56 / 100
262 ms24096 KiB
#include "supertrees.h"
#include <vector>
#include <cmath>
#include <cstdio>
using namespace std;


int construct(std::vector<std::vector<int> > p) {
	int n = p.size();
	vector<vector<int> >r(n);
	vector<vector<int> >c;
    vector<int>us(n,-1);
    int cc=0;
    for(int i=0;i<n;i++){
        for(int k=0;k<n;k++){
            if(p[k][i]!=p[i][k]||p[k][i]==3){
                return 0;
                break;
            }
        }
    }
    for(int i=0;i<n;i++){
        if(p[i][i]!=1){
            return 0;
            break;
        }
        if(us[i]==-1){
            vector<int>s=p[i];
            vector<int>u;
            for(int k=0;k<n;k++){
                if(s[k]!=0){
                    if(us[k]==-1){
                    us[k]=cc;
                    u.push_back(k);
                    }
                    else{
                        return 0;
                        break;
                    }
                }
            }
            c.push_back(u);
            cc++;
        }
    }
    vector<int>a(n,0);
    for(int i=0;i<n;i++)r[i]=a;
    int pa=0;
    for(int i=0;i<n;i++){
        for(int k=0;k<n;k++){
            if(p[i][k]!=0 && us[i]!=us[k]){
                return 0;
                break;
            }
        }
    }
    for(int i=0;i<c.size();i++){
        vector<int>padre(n,-1);
        vector<int>raiz;
        for(int k=0;k<c[i].size();k++){
            if(padre[c[i][k]]==-1){
                padre[c[i][k]]=c[i][k];
                pa=c[i][k];
                int x=pa;
                raiz.push_back(pa);
                vector<int>s=p[c[i][k]];
                for(int j=0;j<n;j++){
                    if(p[c[i][k]][j]!=p[j][c[i][k]]){
                        return 0;
                        break;
                    }
                    if(p[c[i][k]][j]==1){
                        if(p[j]!=s){
                            return 0;
                            break;
                        }
                        padre[j]=pa;
                        r[x][j]=1;
                        r[j][x]=1;
                        x=j;
                    }
                }
            }
        }
        int x=-1;
        if(raiz.size()==2){
            return 0;
        }
        for(int k=0;k<raiz.size();k++){
            if(x==-1){
                x=raiz[k];
            }
            else{
                r[x][raiz[k]]=1;
                r[raiz[k]][x]=1;
                x=raiz[k];
            }
        }
        if(x!=raiz[0]){
            r[raiz[0]][x]=1;
            r[x][raiz[0]]=1;
        }


    }
    for(int i=0;i<n;i++)r[i][i]=0;
    
    build(r);
    return 1;
}

Compilation message (stderr)

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:57:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     for(int i=0;i<c.size();i++){
      |                 ~^~~~~~~~~
supertrees.cpp:60:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |         for(int k=0;k<c[i].size();k++){
      |                     ~^~~~~~~~~~~~
supertrees.cpp:89:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |         for(int k=0;k<raiz.size();k++){
      |                     ~^~~~~~~~~~~~
#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...