求助!莫名wa7
查看原帖
求助!莫名wa7
308464
奇米楼主2020/5/15 10:57

RTRT

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
//#define int long long
#define pb push_back
using namespace std;

inline int read()
{
	int sum=0,ff=1;
	char ch=getchar();
	while(!isdigit(ch))
	{
		if(ch=='-') ff=-1;
		ch=getchar();
	}
	while(isdigit(ch))
		sum=sum*10+(ch^48),ch=getchar();
	return sum;
}

const int N=505;

char ans[N];
int out[N],n,m,pos,vis[N];
vector<int> G[N];

inline void dfs(int u,int op)
{
	if(op==1) ans[u]='a';
	if(op==2) ans[u]='c';
	for ( int i=0;i<G[u].size();i++ ) 
	{
		int v=G[u][i];
		if(ans[v]) continue;
		if(ans[u]==ans[v]) 
		{
			printf("No\n");
			exit(0);
		}
		if(pos&&v==pos) continue;
		if(pos&&u==pos) continue;
		dfs(v,op);
	}
}

int main()
{
	n=read();
	m=read();
	for ( int i=1;i<=m;i++ )
	{
		int x,y;
		x=read();
		y=read();
		G[x].pb(y);
		G[y].pb(x);
		out[x]++;
		out[y]++;
	}
	for ( int i=1;i<=n;i++ ) 
		if(out[i]==n-1) ans[i]='b';
	int kuai=0;
	for ( int i=1;i<=n;i++ ) 
		if(!ans[i])
		{
			kuai++;
			dfs(i,kuai);
		}
	if(kuai>2) return printf("No"),0;
	for ( int i=1;i<=n;i++ ) 
		for ( int j=0;j<G[i].size();j++ ) 
		{
			int v=G[i][j];
			if(ans[i]!=ans[v]&&ans[i]!='b'&&ans[v]!='b') return printf("No"),0;
			if(!ans[i]||!ans[v]) return printf("No"),0;
		}
	puts("Yes");
	for ( int i=1;i<=n;i++ ) putchar(ans[i]);
	return 0;
}


2020/5/15 10:57
加载中...