제출 #1079269

#제출 시각아이디문제언어결과실행 시간메모리
1079269Jawad_Akbar_JJ슈퍼트리 잇기 (IOI20_supertrees)C++17
40 / 100
155 ms22248 KiB
#include <iostream> #include <vector> #include <algorithm> #include "supertrees.h" using namespace std; const int NN = 1005; int seen[NN]; int construct(vector<vector<int>> p){ int n = p.size(); vector<vector<int>> ans(n, vector<int> (n, 0)), comp, comp2; vector<int> out; int z = 0, o = 0, t = 0, th = 0; for (int i=0;i<n;i++) for (int j=0;j<n;j++){ z += p[i][j] == 0; o += p[i][j] == 1; t += p[i][j] == 2; th += p[i][j] == 3; } if (o and z + t + th == 0){ for (int i=1;i<n;i++) ans[i-1][i] = ans[i][i-1] = 1; build(ans); return 1; } if (t + th == 0){ for (int i=0;i<n;i++){ int mx = 0, ind = -1; for (int k=0;k<comp.size();k++){ int cnt = 0; for (int j : comp[k]) cnt += p[i][j]; if (cnt == 0) continue; if (mx > 0 or cnt != comp[k].size()) return 0; ind = k; mx = cnt; } if (ind == -1) comp.push_back({i}); else comp[ind].push_back(i); } for (auto v : comp) for (int j=1;j<v.size();j++) ans[v[j-1]][v[j]] = ans[v[j]][v[j-1]] = 1; build(ans); return 1; } if (o == n and th == 0){ for (int i=0;i<n;i++){ int mx = 0, ind = -1; for (int k=0;k<comp.size();k++){ int cnt = 0; for (int j : comp[k]) cnt += p[i][j] == 2; if (cnt == 0) continue; if (mx > 0 or cnt != comp[k].size()) return 0; ind = k; mx = cnt; } if (ind == -1) comp.push_back({i}); else comp[ind].push_back(i); } for (auto v : comp){ for (int j=1;j<v.size();j++) ans[v[j-1]][v[j]] = ans[v[j]][v[j-1]] = 1; if (v.size() > 1) ans[v.back()][v[0]] = ans[v[0]][v.back()] = 1; if (v.size() == 2) return 0; } build(ans); return 1; } vector<pair<int,int>> vec; if (th == 0){ for (int i=0;i<n;i++){ int mx = 0, ind = -1; for (int k=0;k<comp.size();k++){ int cnt = 0; for (int j : comp[k]) cnt += p[i][j] == 2; if (cnt == 0) continue; if (cnt == comp[k].size()){ ind = k; mx = cnt; } } if (ind == -1) comp.push_back({i}); else comp[ind].push_back(i); } for (int i=0;i<comp.size();i++) vec.push_back({comp[i].size(), i}); sort(begin(vec), end(vec)); for (auto [sz, idx] : vec){ vector<int> v = comp[idx]; if (v.size() > 2){ bool poss = 1; for (int i : v){ if (seen[i]) poss = 0; seen[i] = 1; } if (!poss) continue; for (int j=1;j<v.size();j++) ans[v[j-1]][v[j]] = ans[v[j]][v[j-1]] = 1; ans[v.back()][v[0]] = ans[v[0]][v.back()] = 1; for (int i : v){ for (int j=0;j<n;j++) if (i != j and p[i][j] == 1 and !seen[j]) ans[i][j] = ans[j][i] = seen[j] = 1; } } } comp.clear(); for (int i=0;i<n;i++){ if (seen[i]) continue; int mx = 0, ind = -1; for (int k=0;k<comp.size();k++){ int cnt = 0; for (int j : comp[k]) cnt += p[i][j] == 1; if (cnt == 0) continue; if (cnt == comp[k].size()){ ind = k; mx = cnt; } } if (ind == -1) comp.push_back({i}); else comp[ind].push_back(i); } for (auto v : comp){ for (int j=1;j<v.size();j++) ans[v[j-1]][v[j]] = ans[v[j]][v[j-1]] = 1; } build(ans); return 1; } }

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

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:36:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |    for (int k=0;k<comp.size();k++){
      |                 ~^~~~~~~~~~~~
supertrees.cpp:42:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |     if (mx > 0 or cnt != comp[k].size())
      |                   ~~~~^~~~~~~~~~~~~~~~~
supertrees.cpp:54:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |    for (int j=1;j<v.size();j++)
      |                 ~^~~~~~~~~
supertrees.cpp:63:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |    for (int k=0;k<comp.size();k++){
      |                 ~^~~~~~~~~~~~
supertrees.cpp:69:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |     if (mx > 0 or cnt != comp[k].size())
      |                   ~~~~^~~~~~~~~~~~~~~~~
supertrees.cpp:81:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |    for (int j=1;j<v.size();j++)
      |                 ~^~~~~~~~~
supertrees.cpp:95:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |    for (int k=0;k<comp.size();k++){
      |                 ~^~~~~~~~~~~~
supertrees.cpp:101:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |     if (cnt == comp[k].size()){
      |         ~~~~^~~~~~~~~~~~~~~~~
supertrees.cpp:94:8: warning: variable 'mx' set but not used [-Wunused-but-set-variable]
   94 |    int mx = 0, ind = -1;
      |        ^~
supertrees.cpp:111:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  111 |   for (int i=0;i<comp.size();i++)
      |                ~^~~~~~~~~~~~
supertrees.cpp:126:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  126 |     for (int j=1;j<v.size();j++)
      |                  ~^~~~~~~~~
supertrees.cpp:142:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  142 |    for (int k=0;k<comp.size();k++){
      |                 ~^~~~~~~~~~~~
supertrees.cpp:148:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  148 |     if (cnt == comp[k].size()){
      |         ~~~~^~~~~~~~~~~~~~~~~
supertrees.cpp:141:8: warning: variable 'mx' set but not used [-Wunused-but-set-variable]
  141 |    int mx = 0, ind = -1;
      |        ^~
supertrees.cpp:160:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  160 |    for (int j=1;j<v.size();j++)
      |                 ~^~~~~~~~~
supertrees.cpp:13:47: warning: control reaches end of non-void function [-Wreturn-type]
   13 |  vector<vector<int>> ans(n, vector<int> (n, 0)), comp, comp2;
      |                                               ^
#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...