#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<pair<int,int>> chose;
int n;
int dfs(int mask){
if(dp[mask]<0) return 1e12;
if(dp[mask]<1e12) return dp[mask];
dp[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);
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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |