Submission #1214805

#TimeUsernameProblemLanguageResultExecution timeMemory
1214805biankNewspapers (CEOI21_newspapers)C++20
100 / 100
36 ms4676 KiB
#include <bits/stdc++.h> using namespace std; #define forn(i,n) for(int i=0;i<int(n);i++) #define forsn(i,s,n) for(int i=int(s);i<int(n);i++) #define dforn(i,n) for(int i=int(n)-1;i>=0;i--) #define dforsn(i,s,n) for(int i=int(n)-1;i>=int(s);i--) #define fst first #define snd second #define pb push_back #define eb emplace_back #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() typedef long long ll; typedef vector<ll> vll; typedef vector<int> vi; typedef pair<int,int> ii; const int INF=1e9; const int MAX_N=1005; int maxDepth[MAX_N]; vi adj[MAX_N]; int dfs0(int u, int p=-1){ int maxi=0; for(int v:adj[u]) if(v!=p){ maxi=max(maxi,dfs0(v,u)+1); } return maxDepth[u]=maxi; } int dist[MAX_N],par[MAX_N]; void dfs(int u){ for(int v:adj[u]) if(v!=par[u]){ par[v]=u; dist[v]=dist[u]+1; dfs(v); } } bool check(int n, int m){ if(m!=n-1) return false; forn(u,n){ int cnt=0; for(int v:adj[u]){ if(dfs0(v,u)>=2) cnt++; } if(cnt>2) return false; } return true; } vi findDiameter(int n){ par[0]=-1,dist[0]=0,dfs(0); int u=0; forsn(v,1,n) if(dist[v]>dist[u]) u=v; par[u]=-1,dist[u]=0,dfs(u); int u2=0; forsn(v,1,n) if(dist[v]>dist[u2]) u2=v; vi diameter{u2}; while(diameter.back()!=u){ diameter.pb(par[diameter.back()]); } return diameter; } int main(){ ios::sync_with_stdio(0); cin.tie(0); int n,m; cin>>n>>m; forn(i,m){ int u,v; cin>>u>>v; --u,--v; adj[u].pb(v); adj[v].pb(u); } if(!check(n,m)){ cout<<"NO\n"; return 0; } cout<<"YES\n"; if(n<=2){ cout<<n<<'\n'; forn(i,n) cout<<"1 "; cout<<'\n'; return 0; } vi d=findDiameter(n); vi ret; forsn(i,1,sz(d)-1){ int u=d[i]; ret.pb(u); for(int v:adj[u]) if(sz(adj[v])!=1&&v!=d[i+1]&&v!=d[i-1]){ ret.pb(v); ret.pb(u); } } cout<<2*sz(ret)<<'\n'; forn(i,sz(ret)) cout<<ret[i]+1<<' '; dforn(i,sz(ret)) cout<<ret[i]+1<<' '; cout<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...