Submission #144161

#TimeUsernameProblemLanguageResultExecution timeMemory
144161emilemIzlet (COI19_izlet)C++14
43 / 100
1295 ms54156 KiB
#include <algorithm> #include <iostream> #include <vector> #include <set> using namespace std; vector< vector<int> > a; namespace Subtask1 { vector< vector<int> > nei; vector<bool> used; void Dfs(int v, vector<int>& group) { group.push_back(v); used[v] = true; for (int i = 0; i < nei[v].size(); ++i) if (!used[nei[v][i]]) Dfs(nei[v][i], group); } void Solve1() { nei.resize(a.size()); used.resize(a.size(), false); for (int i = 0; i < a.size(); ++i) for (int j = 0; j < a.size(); ++j) if (a[i][j] == 1 && i != j) nei[i].push_back(j); vector< vector<int> > groups; for (int i = 0; i < a.size(); ++i) if (!used[i]) { groups.push_back(vector<int>()); Dfs(i, groups.back()); } vector<int> ans(a.size()); for (int i = 0; i < groups.size(); ++i) for (int j = 0; j < groups[i].size(); ++j) ans[groups[i][j]] = (i % 2) + 1; for (int i = 0; i < ans.size(); ++i) cout << ans[i] << ' '; cout << endl; for (int i = 0; i < groups.size(); ++i) { for (int j = 0; j + 1 < groups[i].size(); ++j) cout << groups[i][j] + 1 << ' ' << groups[i][j + 1] + 1 << '\n'; if (i + 1 < groups.size()) cout << groups[i].back() + 1 << ' ' << groups[i + 1][0] + 1 << '\n'; } } } void Subtask2() { vector<int> ans(a.size(), -1); ans[0] = 1; for (int i = 1; i < a.size(); ++i) { set<int> s; for (int j = i - 1; j >= 0; --j) { s.insert(ans[j]); if (s.size() == a[j][i]) { ans[i] = ans[j]; break; } } if (ans[i] == -1) ans[i] = *max_element(ans.begin(), ans.begin() + i) + 1; } for (int i = 0; i < a.size(); ++i) cout << ans[i] << ' '; cout << endl; for (int i = 1; i < a.size(); ++i) cout << i << ' ' << i + 1 << '\n'; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int subTask; cin >> subTask; int n; cin >> n; a.resize(n, vector<int>(n)); for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) cin >> a[i][j]; if (subTask == 1) Subtask1::Solve1(); else if (subTask == 2) Subtask2(); char I; cin >> I; }

Compilation message (stderr)

izlet.cpp: In function 'void Subtask1::Dfs(int, std::vector<int>&)':
izlet.cpp:18:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < nei[v].size(); ++i)
                   ~~^~~~~~~~~~~~~~~
izlet.cpp: In function 'void Subtask1::Solve1()':
izlet.cpp:26:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < a.size(); ++i)
                   ~~^~~~~~~~~~
izlet.cpp:27:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = 0; j < a.size(); ++j)
                    ~~^~~~~~~~~~
izlet.cpp:31:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < a.size(); ++i)
                   ~~^~~~~~~~~~
izlet.cpp:38:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < groups.size(); ++i)
                   ~~^~~~~~~~~~~~~~~
izlet.cpp:39:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = 0; j < groups[i].size(); ++j)
                    ~~^~~~~~~~~~~~~~~~~~
izlet.cpp:41:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < ans.size(); ++i)
                   ~~^~~~~~~~~~~~
izlet.cpp:44:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < groups.size(); ++i)
                   ~~^~~~~~~~~~~~~~~
izlet.cpp:46:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = 0; j + 1 < groups[i].size(); ++j)
                    ~~~~~~^~~~~~~~~~~~~~~~~~
izlet.cpp:48:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if (i + 1 < groups.size())
        ~~~~~~^~~~~~~~~~~~~~~
izlet.cpp: In function 'void Subtask2()':
izlet.cpp:57:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < a.size(); ++i)
                  ~~^~~~~~~~~~
izlet.cpp:63:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if (s.size() == a[j][i])
izlet.cpp:72:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < a.size(); ++i)
                  ~~^~~~~~~~~~
izlet.cpp:75:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < a.size(); ++i)
                  ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...