제출 #918947

#제출 시각아이디문제언어결과실행 시간메모리
918947NK_Newspapers (CEOI21_newspapers)C++17
8 / 100
1 ms604 KiB
// Success consists of going from failure to failure without loss of enthusiasm #include <bits/stdc++.h> using namespace std; #define nl '\n' #define pb push_back #define sz(x) int(x.size()) template<class T> using V = vector<T>; using vi = V<int>; int main() { cin.tie(0)->sync_with_stdio(0); int N, M; cin >> N >> M; V<vi> adj(N); vi in(N), path(N, 1); for(int i = 0; i < M; i++) { int u, v; cin >> u >> v; --u, --v; adj[u].pb(v); adj[v].pb(u); in[u]++, in[v]++; } if (M != N - 1) { cout << "NO" << nl; exit(0-0); } if (N == 1) { cout << "YES" << nl; cout << 1 << nl; cout << 1 << nl; exit(0-0); } if (N == 2) { cout << "YES" << nl; cout << 2 << nl; cout << 1 << " " << 1 << nl; exit(0-0); } for(int u = 0; u < N; u++) if (in[u] == 1) path[u] = 0; for(int u = 0; u < N; u++) if (!path[u]) { for(auto& v : adj[u]) in[v]--; } // for(int u = 0; u < N; u++) { // cout << u << " => " << path[u] << " " << in[u] << endl; // } vi ans; function<void(int)> dfs = [&](int u) { ans.pb(u); path[u] = 0; int chd = 0; for(auto& v : adj[u]) if (path[v]) { dfs(v); chd++; } if (chd >= 2) { cout << "NO" << nl; assert(false); exit(0-0); } ans.pb(u); }; for(int u = 0; u < N; u++) if (path[u] && in[u] <= 1) dfs(u); cout << "YES" << nl; cout << sz(ans) << nl; for(auto& x : ans) cout << x + 1 << " "; cout << nl; exit(0-0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...