Submission #1136559

#TimeUsernameProblemLanguageResultExecution timeMemory
1136559byunjaewooNewspapers (CEOI21_newspapers)C++20
8 / 100
90 ms584 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N=1010;
int n, m;
vector<int> adj[N];
vector<int> v, ans;

void dfs(int curr, int prev) {
    bool flag=true;
    for(int next:adj[curr]) if(next!=prev && adj[next].size()!=1)
        dfs(next, curr), v.push_back(curr), flag=false;
    if(flag && adj[curr].size()!=1) v.push_back(curr);
}

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin>>n>>m;
    if(m>=n) {
        cout<<"NO\n"; return 0;
    }
    for(int i=1; i<=m; i++) {
        int u, v; cin>>u>>v;
        adj[u].push_back(v), adj[v].push_back(u);
    }
    if(n==1) {
        cout<<"YES\n";
        cout<<"1\n1"; return 0;
    }
    if(n==2) {
        cout<<"YES\n";
        cout<<"2\n1 1"; return 0;
    }
    for(int i=1; i<=n; i++) {
        v.clear();
        dfs(i, 0);
        if(ans.empty() || v.size()<ans.size()) ans=v;
    }

    set<int> s, t;
    for(int i=1; i<=n; i++) s.insert(i);
    for(int i:ans) {
        s.erase(i), t.clear();
        for(int j:s) for(int k:adj[j]) t.insert(k);
        s=t;
    }
    reverse(ans.begin(), ans.end());
    for(int i:ans) {
        s.erase(i), t.clear();
        for(int j:s) for(int k:adj[j]) t.insert(k);
        s=t;
    }
    reverse(ans.begin(), ans.end());

    if(s.size()==0) {
        cout<<"YES\n";
        cout<<2*ans.size()<<"\n";
        for(int i:ans) cout<<i<<" ";
        reverse(ans.begin(), ans.end());
        for(int i:ans) cout<<i<<" ";
    }
    else cout<<"NO\n";

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...