제출 #528513

#제출 시각아이디문제언어결과실행 시간메모리
528513Rafi22Newspapers (CEOI21_newspapers)C++14
100 / 100
17 ms460 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define st first #define nd second #define pb push_back #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() #define ll long long ll mod=1000000007; int inf=1000000007; ll infl=1000000000000000007; vector<int>G[1007]; int d[1007]; int h[1007]; int o[1007]; bool is[1007]; void dfs(int v) { h[v]=1; for(auto u:G[v]) { if(u==o[v]) continue; o[u]=v; d[u]=d[v]+1; dfs(u); h[v]=max(h[v],h[u]+1); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m,a,b; cin>>n>>m; if(m!=n-1) { cout<<"NO"; return 0; } if(n<=2) { cout<<"YES"<<endl<<n<<endl<<1<<" "; if(n==2) cout<<1; return 0; } for(int i=0;i<n-1;i++) { cin>>a>>b; G[a].pb(b); G[b].pb(a); } for(int i=1;i<=n;i++) { o[i]=0; dfs(i); int c=0; for(auto u:G[i]) if(h[u]>2) c++; if(c>2) { cout<<"NO"; return 0; } } cout<<"YES"<<endl; o[1]=0; d[1]=0; dfs(1); int mx=0,p1,p2; for(int i=1;i<=n;i++) { if(d[i]>mx) { mx=d[i]; p1=i; } } o[p1]=0; d[p1]=0; dfs(p1); mx=0; for(int i=1;i<=n;i++) { if(d[i]>mx) { mx=d[i]; p2=i; } } vector<int>diam; while(p2!=p1) { if(d[p2]!=mx) diam.pb(p2); is[p2]=1; p2=o[p2]; } vector<int>vec,ans; for(auto v:diam) { vec.pb(v); for(auto u:G[v]) { if(!is[u]&&sz(G[u])>1) { vec.pb(u); vec.pb(v); } } } for(auto x:vec) ans.pb(x); reverse(all(vec)); for(auto x:vec) ans.pb(x); cout<<sz(ans)<<endl; for(auto x:ans) cout<<x<<" "; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

newspapers.cpp: In function 'int main()':
newspapers.cpp:97:13: warning: 'p1' may be used uninitialized in this function [-Wmaybe-uninitialized]
   97 |     while(p2!=p1)
      |           ~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...