RT。WA 了 3 个点。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f
#define endl '\n'
#define fi first
#define se second
#define pii pair<int,int>
#define p_q priority_queue
#define iter iterator
#define pb push_back
#define eps 1e-8
#define oper operator
#define mk make_pair
#define ls x<<1
#define rs x<<1|1
#define int ll
int n,m,a[105][105],cnt[105],ans[105];
vector<int>g[105];
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
for(int i=1;i<=n;i++){
int t=i;
for(int j=i+1;j<=n;j++){
if(a[j][i]>a[t][i]){
t=j;
}
}
swap(a[t],a[i]);
for(int j=i+1;j<=n;j++){
if(a[j][i]){
for(int k=i;k<=n+1;k++){
a[j][k]^=a[i][k];
}
}
}
}
int k=1;
ans[n]=a[n][n+1];
if(a[n][n]==0){
ans[n]=1;
if(a[n][n+1]!=0){
cout<<"No";
return 0;
}
}
for(int i=n-1;i>=1;i--){
for(int j=i+1;j<=n;j++){
if(a[i][j])a[i][n+1]^=ans[j];
}
ans[i]=a[i][n+1];
if(a[i][i]==0){
if(ans[i]>0){
cout<<"No";
return 0;
}
ans[i]=1+k;
k++;
}
}
bool f=0;
for(int i=1;i<=n;i++){
if(ans[i]==0){
f=1;
break;
}
}
if(f){
puts("No");
return 0;
}else puts("Yes");
for(int i=1;i<=n;i++) cout<<ans[i]<<' ';
return 0;
}