제출 #783575

#제출 시각아이디문제언어결과실행 시간메모리
783575Malix슈퍼트리 잇기 (IOI20_supertrees)C++14
컴파일 에러
0 ms0 KiB
#include "supertrees.h" #include <vector> #include <bits/stdc++.h> using namespace std; int construct(std::vector<std::vector<int>> p) { int n = p.size(); std::vector<std::vector<int>> answer; for (int i = 0; i < n; i++) { std::vector<int> row; row.resize(n); answer.push_back(row); } if(n==1){ answer[0][0] = 0; build(answer); return 1; } int count = 0; int zerocount = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ if(p[i][j] == 1){ count++; } else if(p[i][j] == 0){ zerocount++; } } } if(zerocount == (n*n)-n){ for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ answer[i][j] = 0; } } build(answer); return 1; } //subtask 1 if(count == n*n){ for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ answer[i][j] = 0; } } for(int i = 1; i < n; i++){ answer[i][0] = 1; answer[0][i] = 1; } build(answer); return 1; } //subtask 2 count = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ if(p[i][j] <= 1){ count++; } } } if(count == n*n){ vector<int> arr(n, 0); vector<int> arr2; int arr2size; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ answer[i][j] = 0; } } int currentIndex = 0; while(currentIndex != n){ if(!arr[currentIndex]){ arr2.push_back(currentIndex); for(int i = 0; i < n; i++){ if(p[currentIndex][i]){ if(arr[i]){ return 0; } answer[currentIndex][i] = 1; answer[i][currentIndex] = 1; if(currentIndex != i){ arr[i]++; } arr2.push_back(i); } } arr2size = arr2.size(); for(int k = 0; k < arr2size-1; k++){ for(int m = k+1; m < arr2size; m++){ if(!p[arr2[k]][arr2[m]]){ return 0; } } } for(int k = 0; k < arr2size; k++){ for(int m = 0; m < n; m++){ if(p[arr2[k]][m]){ if(find(arr2.begin(), arr2.end(), m) == arr2.end()){ return 0; } } } } arr[currentIndex]++; arr2.clear(); } currentIndex++; } for(int i = 0 ; i < n; i++){ if(arr[i] > 1){ return 0; } } for(int i = 0; i < n; i++){ answer[i][i] = 0; } build(answer); return 1; } //subtask 3 count = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ if(p[i][j] == 0 || p[i][j] == 2){ count++; } } } if(count == (n*n)-n){ if(n==2){ return 0; } vector<int> arr(n, 0); vector<int> arr2; int arr2size; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ answer[i][j] = 0; } } int currentIndex = 0; while(currentIndex != n){ if(!arr[currentIndex]){ arr2.push_back(currentIndex); for(int i = 0; i < n; i++){ if(p[currentIndex][i]){ if(arr[i]){ return 0; } if(currentIndex != i){ arr[i]++; arr2.push_back(i); } } } arr2size = arr2.size(); if(arr2size > 2){ answer[arr2[0]][arr2[arr2size-1]] = 1; answer[arr2[arr2size-1]][arr2[0]] = 1; for(int k = 0; k < arr2size-1; k++){ answer[arr2[k]][arr2[k+1]] = 1; answer[arr2[k+1]][arr2[k]] = 1; } } else if(arr2size == 2){ return 0; } for(int k = 0; k < arr2size-1; k++){ for(int m = k+1; m < arr2size; m++){ if(!p[arr2[k]][arr2[m]]){ return 0; } } } for(int k = 0; k < arr2size; k++){ for(int m = 0; m < n; m++){ if(p[arr2[k]][m]){ if(find(arr2.begin(), arr2.end(), m) == arr2.end()){ return 0; } } } } arr[currentIndex]++; arr2.clear(); } currentIndex++; } for(int i = 0 ; i < n; i++){ if(arr[i] > 1){ return 0; } } for(int i = 0; i < n; i++){ answer[i][i] = 0; } build(answer); return 1; } //subtask 4 count = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ if(p[i][j] <= 2){ count++; } } } if(count == n*n){ vector<int> arr(n, 0); vector<int> arr2; int arr2size; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ answer[i][j] = 0; } } int currentIndex = 0; //0 or 1 part while(currentIndex != n){ if(!arr[currentIndex]){ for(int i = 0; i < n; i++){ if(p[currentIndex][i] == 1){ answer[currentIndex][i] = 1; answer[i][currentIndex] = 1; if(currentIndex != i){ arr[i]++; } } } arr[currentIndex] = 1; } currentIndex++; } for(int i = 0; i < n; i++){ answer[i][i] = 0; } build(answer); return 1; } currentIndex = 0; arr.resize(n, 0); while(currentIndex != n){ if(!arr[currentIndex]){ arr2.push_back(currentIndex); for(int i = 0; i < n; i++){ if(p[currentIndex][i] == 2){ if(currentIndex != i){ arr[i]++; arr2.push_back(i); } } } arr2size = arr2.size(); if(arr2size>2){ answer[arr2[0]][arr2[arr2size-1]] = 1; answer[arr2[arr2size-1]][arr2[0]] = 1; for(int k = 0; k < arr2size-1; k++){ answer[arr2[k]][arr2[k+1]] = 1; answer[arr2[k+1]][arr2[k]] = 1; } } arr[currentIndex]++; arr2.clear(); } currentIndex++; } build(answer); return 1; }

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

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:264:7: warning: unused variable 'arr2size' [-Wunused-variable]
  264 |   int arr2size;
      |       ^~~~~~~~
supertrees.cpp:311:2: error: 'currentIndex' was not declared in this scope
  311 |  currentIndex = 0;
      |  ^~~~~~~~~~~~
supertrees.cpp:312:9: error: 'arr' was not declared in this scope
  312 |         arr.resize(n, 0);
      |         ^~~
supertrees.cpp:319:5: error: 'arr2' was not declared in this scope
  319 |     arr2.push_back(currentIndex);
      |     ^~~~
supertrees.cpp:331:5: error: 'arr2size' was not declared in this scope
  331 |     arr2size = arr2.size();
      |     ^~~~~~~~