Submission #659818

#TimeUsernameProblemLanguageResultExecution timeMemory
659818Sohsoh84Newspapers (CEOI21_newspapers)C++17
100 / 100
1 ms468 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; #define all(x) (x).begin(),(x).end() #define X first #define Y second #define sep ' ' #define endl '\n' #define debug(x) cerr << #x << ": " << x << endl; const ll MAXN = 1e3 + 10; int n, m, dist[MAXN], par[MAXN], D[MAXN]; vector<int> adj[MAXN], diam, ans; void dfs(int v) { dist[v] = dist[par[v]] + 1; D[v] = 1; for (int u : adj[v]) { if (u != par[v]) { par[u] = v; dfs(u); D[v] = max(D[v], D[u] + 1); } } } inline void add(int v) { int m = ans.size(); if (m >= 2 && ans[m - 1] == v && ans[m - 2] == v) { ans.pop_back(); ans.pop_back(); } ans.push_back(v); } inline void dojob() { int m = diam.size(); diam.push_back(-1); int i = 0; for (i = 0; i < m; i++) { int v = diam[i]; add(v); for (int u : adj[v]) { if (u == par[v] || u == diam[i + 1]) continue; if (D[u] >= 2) { cout << "NO" << endl; exit(0); } add(u); add(v); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; if (m >= n) return cout << "NO" << endl, 0; if (n == 1) return cout << "YES" << endl << 1 << endl << 1 << endl, 0; if (n == 2) return cout << "YES" << endl << 2 << endl << 1 << sep << 1 << endl, 0; for (int i = 1; i <= m; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } int rt = 0; vector<int> vec; for (int i = 1; i <= n; i++) { if (adj[i].size() == 1) vec.push_back(i); else rt = i; } for (int e : vec) for (int u : adj[e]) adj[u].erase(find(all(adj[u]), e)); dfs(rt); int v = max_element(dist, dist + MAXN) - dist; memset(par, 0, sizeof par); memset(dist, 0, sizeof dist); dfs(v); v = max_element(dist, dist + MAXN) - dist; while (v) { diam.push_back(v); v = par[v]; } reverse(all(diam)); dojob(); int m = ans.size(); while (m--) ans.push_back(ans[m]); cout << "YES" << endl << ans.size() << endl; for (int e : ans) cout << e << sep; cout << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...