GIL-Guilds(黑白灰染色)

传送门门门门门咩咩咩咩咩咩咩咩咩咩咩咩

\(这题真是扯谈!!!\)

\(灰色很高级是吧,但是题目没要你把颜色全部用上去啊!!!\)

\(黑色或者白色只有一个条件,但灰色需要和所有三种颜色都相邻。这么难搞,那我完全可以用黑或白代替灰色啊!\)

于是,转化为一个黑白染色系统

\(如果按照黑白相间染色的话,一定可以成功。不可以成功,说明那个点是孤立的。\)

\(于是,随便电风扇(dfs)一下就好了呀~\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=1000009;
int n,m;
struct p{
	int to,nxt;
}d[maxn];int head[maxn],cnt=1,color[maxn];
void add(int u,int v){
	d[cnt].to=v,d[cnt].nxt=head[u],head[u]=cnt++;
}
void dfs(int now,int se)
{
	for(int i=head[now];i;i=d[i].nxt)
	{
		int v=d[i].to;
		if(color[v]==-1)//没有访问过
		{
			color[v]=se^1;
			dfs(v,color[v]);
		}
	}
}
int in[maxn];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int l,r;
		cin>>l>>r;
		add(l,r),add(r,l);
		in[l]++,in[r]++;
	}
	for(int i=1;i<=n;i++)
	{
		if(in[i]==0)
		{
			cout<<"NIE";
			return 0;
		}
	}
	memset(color,-1,sizeof(color));
	for(int i=1;i<=n;i++)
	{
		if(color[i]==-1)
		{
			color[i]=1;
			dfs(i,1);
		}
	}
	cout<<"TAK"<<endl;
	for(int i=1;i<=n;i++)
	{
		if(color[i]==1)
			cout<<"K"<<endl;
		else
			cout<<"S"<<endl;
	}
}

猜你喜欢

转载自www.cnblogs.com/iss-ue/p/12690137.html
GIL