Submission #1302888

#TimeUsernameProblemLanguageResultExecution timeMemory
1302888LudisseyNewspapers (CEOI21_newspapers)C++20
9 / 100
276 ms589824 KiB
#include <bits/stdc++.h>
#define int long long
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
 
using namespace std;

vector<vector<int>> neigh;
vector<int> dp;
vector<bool> visited;
vector<pair<int,int>> chose;

int n;

int dfs(int mask){
    if(mask==0) return 0;
    if(visited[mask]) return dp[mask];
    visited[mask]=1;
    int nxt=0;
    int only=0;
    for (int i = 0; i < n; i++)
    {
        if((mask&(1<<i))==0) continue;
        for (auto u : neigh[i]) {
            if((nxt&(1<<u))==0) only|=(1<<u);
            else if(only&(1<<u)) only^=(1<<u);
            nxt|=(1<<u);
        }
    }
    
    int mn=1e12;
    pair<int,int> mnI={-1,-1};
    for (int i = 0; i < n; i++)
    {
        int nw=nxt;
        if(mask&(1<<i)){
            for (auto u : neigh[i]) {
                if(only&(1<<u)) nw^=(1<<u);
            }
        }

        int v=dfs(nw);
        if(v<mn) {
            mn=v;
            mnI={i,nw};
        } 
    }
    dp[mask]=mn+1;
    chose[mask]=mnI;    
    return mn+1;
}

signed main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    int m; cin >> n >> m;
    neigh.resize(n);
    dp.resize((1<<n),1e12);
    visited.resize((1<<n),false);
    chose.resize((1<<n),{-1,-1});
    for (int i = 0; i < m; i++)
    {
        int a,b; cin >> a >> b; a--; b--;
        neigh[a].push_back(b);
        neigh[b].push_back(a);
    }
    dp[0]=0;
    int ret=dfs((1<<n)-1);
    if(ret>=1e12) cout << "NO\n";
    else{
        cout << "YES\n";
        cout << ret << "\n";
        int cmask=(1<<n)-1;
        while(cmask>0){
            cout << chose[cmask].first+1 << " ";
            cmask=chose[cmask].second;
        }
    }
    return 0;
}   
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...