제출 #698816

#제출 시각아이디문제언어결과실행 시간메모리
698816CyanmondNewspapers (CEOI21_newspapers)C++17
6 / 100
1 ms340 KiB
#include <bits/stdc++.h> int main() { int N, M; std::cin >> N >> M; if (N == 1) { std::cout << "YES" << std::endl; std::cout << 1 << std::endl << 1 << std::endl; return 0; } if (M != N - 1) { std::cout << "NO" << std::endl; return 0; } std::vector<int> A(M), B(M); std::vector<int> deg(N); std::vector<std::vector<int>> tree(N); for (int i = 0; i < M; ++i) { std::cin >> A[i] >> B[i]; --A[i], --B[i]; tree[A[i]].push_back(B[i]); tree[B[i]].push_back(A[i]); ++deg[A[i]]; ++deg[B[i]]; } std::vector<int> sDeg(N); for (int i = 0; i < N; ++i) { for (const int t : tree[i]) { if (deg[t] >= 2) { ++sDeg[i]; } } } std::vector<bool> color(N); auto dfs = [&](auto &&self, const int v, const int p, const bool c) -> void { color[v] = c; for (const int t : tree[v]) { if (t == p) { continue; } self(self, t, v, not c); } }; dfs(dfs, 0, -1, false); bool okA = false, okB = false; bool prmA = true, prmB = true; for (int i = 0; i < N; ++i) { if (color[i] == false and deg[i] >= 3) { prmA = false; } if (color[i] == false and deg[i] == 1) { okA = true; } if (color[i] == true and deg[i] >= 3) { prmB = false; } if (color[i] == true and deg[i] == 1) { okB = true; } } prmA &= okA; prmB &= okB; if ((not prmA) and (not prmB)) { std::cout << "NO" << std::endl; return 0; } std::cout << "YES" << std::endl; std::vector<int> answer; for (int i = 1; i <= N; ++i) { answer.push_back(i); } if (N != N / 2 * 2) { answer.push_back(N); } for (int i = N / 2 * 2; i >= 1; --i) { answer.push_back(i); } std::cout << answer.size() << std::endl; for (auto &e : answer) { std::cout << e << ' '; } std::cout << std::endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...