Submission #827482

#TimeUsernameProblemLanguageResultExecution timeMemory
827482BERNARB01Newspapers (CEOI21_newspapers)C++17
54 / 100
1 ms468 KiB
/** * author: BERNARD B.01 **/ #include <bits/stdc++.h> using namespace std; #ifdef B01 #include "deb.h" #else #define deb(...) #endif int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; if (m != n - 1) { cout << "NO" << '\n'; return 0; } vector<vector<int>> g(n); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; --u; --v; g[u].push_back(v); g[v].push_back(u); } if (n == 1) { cout << "YES" << '\n'; cout << 1 << '\n'; cout << 1 << '\n'; return 0; } if (n == 2) { cout << "YES" << '\n'; cout << 2 << '\n'; cout << 1 << '\n'; cout << 1 << '\n'; return 0; } int d = 0, to = 0; function<void(int, int, int)> Dfs = [&](int v, int pr, int dph) { if (dph >= d) { d = dph; to = v; } for (int u : g[v]) { if (u == pr) { continue; } Dfs(u, v, dph + 1); } }; Dfs(0, -1, 0); int a = to; Dfs(to, -1, 0); int b = to; vector<int> que; vector<int> dist(n, -1); function<bool(int, int, int)> Mark = [&](int v, int pr, int tar) { if (v == tar) { que.push_back(v); dist[v] = 0; return true; } for (int u : g[v]) { if (u == pr) { continue; } if (Mark(u, v, tar)) { que.push_back(v); dist[v] = 0; return true; } } return false; }; Mark(a, -1, b); for (int b = 0; b < (int) que.size(); b++) { for (int u : g[que[b]]) { if (dist[u] == -1) { dist[u] = dist[que[b]] + 1; que.push_back(u); } } } if (*max_element(dist.begin(), dist.end()) > 2) { cout << "NO" << '\n'; return 0; } vector<int> z; function<void(int, int)> Dfs2 = [&](int v, int pr) { if (g[v].size() > 1) { z.push_back(v); } bool bl = false; for (int u : g[v]) { if (u == pr) { continue; } Dfs2(u, v); if (g[v].size() > 1 && g[u].size() > 1) { z.push_back(v); } else if (g[v].size() > 1 && g[u].size() == 1) { bl = true; } } if (bl) { z.push_back(v); } }; for (int i = 0; i < n; i++) { if (g[i].size() == 1) { Dfs2(i, -1); break; } } cout << "YES" << '\n'; cout << (int) z.size() << '\n'; for (int i = 0; i < (int) z.size(); i++) { if (i > 0) { cout << " "; } cout << z[i] + 1; } cout << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...