제출 #1187169

#제출 시각아이디문제언어결과실행 시간메모리
1187169UnforgettableplNewspapers (CEOI21_newspapers)C++20
8 / 100
1 ms584 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,M; cin >> n >> M; if(M!=n-1){ cout << "NO\n"; return 0; } vector<vector<int>> adj(n+1); for(int i=1;i<=M;i++){ int u,v;cin>>u>>v; adj[u].emplace_back(v); adj[v].emplace_back(u); } pair<int,int> ans = {0,0}; int p1 = 0; int p2 = 0; { function<void(int,int,int)> dfs = [&](int x,int p,int dist){ ans=max(ans,{dist,x}); for(int&i:adj[x])if(i!=p)dfs(i,x,dist+1); }; dfs(1,0,1); p1 = ans.second; ans = {0,0}; dfs(p1,0,1); p2 = ans.second; } vector<bool> isOnDia(n+1); { function<bool(int,int)> dfs = [&](int x,int p){ if(x==p2){isOnDia[x]=true;return true;} for(int&i:adj[x])if(i!=p)if(dfs(i,x)){isOnDia[x]=true;return true;} return false; }; dfs(p1,0); } bool works = true; vector<int> walk; { function<void(int,int)> generateDFS = [&](int x,int p){ if(!isOnDia[x]){ if(adj[x].size()==2){ walk.emplace_back(x); walk.emplace_back(p); } else if(adj[x].size()>2)works=false; return; } if(x!=p1 and x!=p2)walk.emplace_back(x); for(int&i:adj[x])if(!isOnDia[i])generateDFS(i,x); for(int&i:adj[x])if(i!=p and isOnDia[i])generateDFS(i,x); }; generateDFS(p1,0); } vector<int> revWalk = walk; reverse(revWalk.begin(),revWalk.end()); for(int&i:revWalk)walk.emplace_back(i); if(n<=2)walk.emplace_back(1); if(n==2)walk.emplace_back(1); if(works){ cout << "YES\n"; cout << walk.size() << '\n'; for(int&i:walk)cout<<i<<' '; cout << '\n'; } else cout << "NO\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...