Submission #594252

#TimeUsernameProblemLanguageResultExecution timeMemory
594252Pety슈퍼트리 잇기 (IOI20_supertrees)C++14
100 / 100
202 ms26180 KiB
#include <bits/stdc++.h> #include "supertrees.h" #define ll long long using namespace std; const int INF = 1e9; const int MOD = 1e9 + 7; vector<vector<int>> p, ans; vector<int>idk, comp; int n, rep[1002], selected, viz[1002]; void dfs1 (int nod) { rep[nod] = selected; viz[nod] = 1; for (int i = 0; i < n; i++) if (p[nod][i] == 1 && !viz[i]) dfs1(i); } void dfs2 (int nod) { comp.push_back(nod); viz[nod] = 1; for (auto it : idk) if (!viz[it] && p[nod][it] == 2) dfs2(it); } int construct (vector<vector<int>>aux) { p = aux; n = p.size(); ans.resize(n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (p[i][j] == 3) return 0; for (int i = 0; i < n; i++) ans[i].resize(n); for (int i = 0; i < n; i++) if (!viz[i]) { selected = i; idk.push_back(selected); dfs1(i); } for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (rep[i] == rep[j] && p[i][j] != 1) return 0; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (rep[i] != rep[j] && p[i][j] != p[rep[i]][rep[j]]) return 0; for (auto it : idk) { int aux = -1; for (int j = 0; j < n; j++) if (rep[j] == it) { if (aux != -1) ans[aux][j] = ans[j][aux] = 1; aux = j; } } memset(viz, 0, sizeof(viz)); for (auto it : idk) { if (!viz[it]) { comp.clear(); dfs2(it); if (comp.size() == 1) continue; if (comp.size() == 2) return 0; for (int i = 0; i < comp.size(); i++) for (int j = i + 1; j < comp.size(); j++) if (p[comp[i]][comp[j]] != 2) return 0; for (int i = 0; i < comp.size(); i++) ans[comp[i]][comp[(i + 1) % comp.size()]] = ans[comp[(i + 1) % comp.size()]][comp[i]] = 1; } } build(ans); return 1; } // int main () // { // cout << construct({{1, 2, 0, 2}, {2, 1, 2, 2}, {2, 2, 1, 2}, {2, 2, 2, 1}}); // return 0; // }

Compilation message (stderr)

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