This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define FFOR(i,a,b,c) for(int i=(a);(c)>0?i<=(b):i>=(b);i+=(c))
#define FOOR(i,a,b) FFOR(i,a,b-1,1)
#define ROOF(i,a,b) FFOR(i,b-1,a,-1)
#define FOR(i,n) FOOR(i,0,n)
#define ROF(i,n) ROOF(i,0,n)
#define FORR(x,v) for(auto &x:v)
#define all(v) (v).begin(),(v).end()
#define lla(v) (v).rbegin(),(v).rend()
#define sz(v) (int)((v).size())
#define vc vector
#define pb push_back
#define ppb pop_back
#define bk back()
#define fr front()
#define pp pop()
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
#define bg begin()
#define en end()
#define em empty()
#define f first
#define s second
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N,M;
cin>>N>>M;
vc<int> adj(N);
FOR(i,M){
int x,y;
cin>>x>>y;
x--,y--;
adj[x]+=1<<y;
adj[y]+=1<<x;
}
if(M!=N-1){
cout<<"NO\n";
return 0;
}
vector<int> f(1<<N,-1),g(1<<N);
queue<int> q;
f[(1<<N)-1]=0;
q.push((1<<N)-1);
while(!q.em){
int m=q.fr;q.pp;
FOR(i,N){
if(~m>>i&1) continue;
int m2=0;
FOR(j,N){
if(i!=j&&(m>>j&1)) m2|=adj[j];
}
if(f[m2]==-1){
f[m2]=m;
g[m2]=i;
q.push(m2);
}
}
}
if(f[0]==-1){
cout<<"NO\n";
return 0;
}
cout<<"YES\n";
vc<int> ans;
for(int i=0;i!=(1<<N)-1;i=f[i]) ans.pb(g[i]);
reverse(all(ans));
cout<<sz(ans)<<"\n";
FORR(x,ans)cout<<x+1<<" ";
return 6/22;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |