제출 #310363

#제출 시각아이디문제언어결과실행 시간메모리
310363APROHACK슈퍼트리 잇기 (IOI20_supertrees)C++14
21 / 100
256 ms23548 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
long long padres[1001];
vector<int>conjuntos[1001];
long long fnd(long long nodo){
    if(padres[nodo]==nodo)return nodo;
    return padres[nodo]=fnd(padres[nodo]);
}
int construct(vector<vector<int> >p) {
    bool haydos=false;
	int n = p.size();
    vector<vector<int> > answer;
	for (int i = 0; i < n; i++) {
		std::vector<int> row;
		row.resize(n);
		for(int j = 0 ; j < n ; j ++){
            if(p[i][j]==2)haydos=true;
            row[j]=0;
		}
		answer.push_back(row);
		padres[i]= i;
		conjuntos[i].push_back(i);
	}
	if(!haydos){
        for(int i = 0 ; i < n-1 ; i ++){
            for(int j= i +1 ; j < n ; j ++){
                if(p[i][j]==1){
                    padres[fnd(i)]=fnd(j);
                }
            }
        }
        for(int i = 0 ; i < n-1 ; i ++){
            for(int j= i +1 ; j < n ; j ++){
                if(p[i][j]==0){
                    if(fnd(i)==fnd(j))return 0;
                }
            }
        }
        for(int i = 0 ; i < n ; i ++){
            if(fnd(i)==i)continue;
            else {
                answer[padres[i]][i]=1;
                answer[i][padres[i]]=1;
            }
        }
	}else{
        for(int i = 0 ; i < n-1 ; i ++){
            for(int j= i +1 ; j < n ; j ++){
                if(p[i][j]==2){
                    if(fnd(i)==fnd(j))continue;
                    for(int p = 0 ; p < conjuntos[fnd(i)].size() ; p ++){
                        conjuntos[fnd(j)].push_back(conjuntos[fnd(i)][p]);
                    }
                    conjuntos[fnd(i)].clear();
                    padres[fnd(i)]=fnd(j);
                }
            }
        }
        for(int i = 0 ; i < n-1 ; i ++){
            for(int j= i +1 ; j < n ; j ++){
                if(p[i][j]==0){
                    if(fnd(i)==fnd(j))return 0;
                }
            }
        }
        for(int i = 0 ; i < n ; i ++){
            if(conjuntos[i].size()<=1)continue;
            for(int j = 0 ; j < conjuntos[i].size(); j ++){
                if(j==0){
                    answer[conjuntos[i][conjuntos[i].size()-1]][conjuntos[i][0]]=1;
                    answer[conjuntos[i][0]][conjuntos[i][conjuntos[i].size()-1]]=1;

                }else{
                    answer[conjuntos[i][j]][conjuntos[i][j-1]]=1;
                    answer[conjuntos[i][j-1]][conjuntos[i][j]]=1;

                }
            }
        }
	}
	build(answer);
	return 1;
}

컴파일 시 표준 에러 (stderr) 메시지

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:52:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |                     for(int p = 0 ; p < conjuntos[fnd(i)].size() ; p ++){
      |                                     ~~^~~~~~~~~~~~~~~~~~~~~~~~~~
supertrees.cpp:69:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |             for(int j = 0 ; j < conjuntos[i].size(); j ++){
      |                             ~~^~~~~~~~~~~~~~~~~~~~~
#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...