Submission #403710

#TimeUsernameProblemLanguageResultExecution timeMemory
403710victoriadConnecting Supertrees (IOI20_supertrees)C++14
11 / 100
291 ms27712 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++){
        if(us[i]==-1){
            vector<int>s=p[i];
            c.push_back(s);
            for(int k=0;k<n;k++){
                if(s[k]!=0){
                    us[k]=cc;
                }
            }
            cc++;
        }
    }
    vector<int>a(n,0);
    for(int i=0;i<n;i++)r[i]=a;
    vector<bool>u(n,false);
    for(int i=0;i<c.size();i++){
        vector<int>dos;
        for(int k=0;k<c[i].size();k++){
            if(c[i][k]==2)
            dos.push_back(k);
        }
        for(int k=0;k<dos.size();k++){
            for(int j=0;j<n;j++){
                if(j!=k){
                    if(p[k][j]==1){
                        r[k][j]=1;
                        r[j][k]=1;
                        u[k]=true;
                        break;
                    }
                }
            }
        }
    }
    for(int i=0;i<c.size();i++){
        int x1=-1,x2=-1,l=-1;
        for(int k=0;k<c[i].size();k++){
            if(c[i][k]==1){
                if(l==-1){
                    l=k;
                }
                else{
                    r[k][l]=1;
                    r[l][k]=1;
                    l=k;
                }
            }
            else if(c[i][k]==2){
                if(x1==-1 && !u[k]){
                    x1=k;
                    x2=k;
                }
                else{
                    if(!u[k]){
                    r[k][x2]=1;
                    r[x2][k]=1;
                    x2=k;
                    }
                }
            }
        }
        if(x2!=-1){
            if(l!=-1){
                r[l][x2]=1;
                r[x2][l]=1;
                r[l][x1]=1;
                r[x1][l]=1;
            }
            else{
                r[x1][x2]=1;
                r[x2][x1]=1;
            }
        }
 
    }
    build(r);
    return 1;
}

Compilation message (stderr)

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