题意

给一张无向图,要求你用黑白灰给点染色,且满足对于任意一个黑点,至少有一个白点和他相邻;对于任意一个白点,至少有一个黑点与他相邻,对于任意一个灰点,至少同时有一个黑点和白点和灰点与他相邻,问能否成功n(<=200000) and m(<=500000)

题解

我一开始以为是一定成功。

结果忘了一个独立点的情况。

我们知道树一定是二分图。

所以用并查集求出每个联通块的随便一个生成树,跑bfs黑白染色即可。(甚至用不到灰色)

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int N=;
const int M=;
int fa[N],n,m,cnt,book[N],col[N],head[N];
struct edge{
int to,nxt;
}e[M*];
void add(int u,int v){
cnt++;
e[cnt].nxt=head[u];
e[cnt].to=v;
head[u]=cnt;
}
int find(int x){
if(fa[x]==x)return x;
else return fa[x]=find(fa[x]);
}
void bfs(int s,int c){
queue<int> q;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(col[v]==-){
col[v]=col[u]^;
q.push(v);
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)fa[i]=i;
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
int x=find(u);
int y=find(v);
if(x==y)continue;
book[u]=book[v]=;
add(u,v);
add(v,u);
}
for(int i=;i<=n;i++){
if(book[i]==){
printf("NIE");
return ;
}
}
printf("TAK\n");
memset(col,-,sizeof(col));
for(int i=;i<=n;i++){
if(col[i]==-){
col[i]=;
bfs(i,);
}
}
for(int i=;i<=n;i++){
if(col[i]==)printf("K\n");
else printf("S\n");
}
return ;
}

最新文章

  1. 技术笔记:Indy的TIdSMTP改造,解决发送Html和主题截断问题
  2. 【十大经典数据挖掘算法】CART
  3. Web大文件上传控件-jsp-sql示例更新-Xproer.HttpUploader6.2
  4. 用Visual Studio Code 开发应用之 安装 Visual Studio Code
  5. df du
  6. hadoop 文件 复制 移动 FileUtil.copy
  7. YY前端笔试总结
  8. java中常用的字符串的截取方法
  9. 软体project(四)——一生
  10. C#操作Word文档(加密、解密、对应书签插入分页符)
  11. 自己写的一个tomcat发布脚本
  12. Java finalize方法使用
  13. Scss 与 Sass 是什么,他们的区别在哪里?
  14. PHP 高并发秒杀解决方案
  15. C++ MFC------ 快捷键
  16. Mac 系统重新安装的几种方法
  17. AX_Currency
  18. mysql创建用户,并指定用户的权限(grant命令)
  19. strstr实现
  20. echarts 拐点添加图片

热门文章

  1. 关于如何让cell一直保持选中?
  2. [nginx]第一篇
  3. HDU 1166 敌兵布阵【线段树 单点更新】
  4. day02变量
  5. 为什么maven 创建web工程不自动生成Deployment Descriptor:工程名
  6. mac终端安装webpack的时候报错Err,解决的办法 sudo npm install webpack -g
  7. BZOJ 3530 [SDOI2014]数数 (Trie图/AC自动机+数位DP)
  8. react添加右键点击事件
  9. linux下创建带password的用户
  10. mysql-面试题目1