제출 #799134

#제출 시각아이디문제언어결과실행 시간메모리
799134finn__Newspapers (CEOI21_newspapers)C++17
8 / 100
1 ms340 KiB
#include <bits/stdc++.h> using namespace std; constexpr size_t N = 1000; vector<size_t> g[N]; size_t adj_leafs[N]; void find_main_line(size_t u, size_t p, vector<size_t> &line) { line.push_back(u); for (size_t v : g[u]) if (v != p && g[v].size() != 1) { find_main_line(v, u, line); return; } } int main() { size_t n, m; cin >> n >> m; if (m != n - 1) { cout << "NO\n"; return 0; } if (n == 1) { cout << "YES\n1\n1\n"; return 0; } if (n == 2) { cout << "YES\n2\n1 1\n"; return 0; } for (size_t i = 0; i < m; ++i) { size_t u, v; cin >> u >> v; g[u - 1].push_back(v - 1); g[v - 1].push_back(u - 1); } for (size_t i = 0; i < n; ++i) if (g[i].size() == 1) adj_leafs[g[i][0]]++; for (size_t i = 0; i < n; ++i) if (g[i].size() > 1 && g[i].size() - adj_leafs[i] <= 1) { vector<size_t> line; find_main_line(i, -1, line); size_t num_non_leafs = 0; for (size_t j = 0; j < n; ++j) num_non_leafs += g[j].size() > 1; if (line.size() != num_non_leafs) { cout << "NO\n"; return 0; } else { cout << "YES\n" << 2 * line.size() << '\n'; for (size_t u : line) cout << u + 1 << ' '; reverse(line.begin(), line.end()); for (size_t u : line) cout << u + 1 << ' '; cout << '\n'; return 0; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...