1. /*************************************************************************
  2. > File Name: j.cpp
  3. > Author: HJZ
  4. > Mail: 2570230521@qq.com
  5. > Created Time: 2014年08月28日 星期四 12时26分13秒
  6. ************************************************************************/
  7.  
  8. //提議:能否將一個給定的有向圖,變成兩個完全圖(任意兩點都直接相連,雙向邊)
  9.  
  10. #include <queue>
  11. #include <string>
  12. #include <cstdio>
  13. #include <stack>
  14. #include <cstring>
  15. #include <iostream>
  16. #include <algorithm>
  17. #define N 105
  18. using namespace std;
  19.  
  20. int a[N], b[N];
  21. //a, b集合初始化爲空!
  22. int g[N][N];
  23. int n;
  24.  
  25. bool flag;
  26.  
  27. bool dfs(int u, int la, int lb){
  28. if(u>n && la+lb==n) return true;//如果a ,b集合中的元素數目恰好是n,則說明可以形成兩個完全圖!
  29. bool flagx=true;
  30. for(int i=; i<la && flagx; ++i)
  31. if(!(g[a[i]][u] && g[u][a[i]]))
  32. flagx=false;
  33. if(flagx) a[la]=u;//如果u節點可以放入a集合中
  34. if(flagx && dfs(u+, la+, lb)) return true;
  35. bool flagy=true;
  36. for(int i=; i<lb && flagy; ++i)
  37. if(!(g[b[i]][u] && g[u][b[i]]))
  38. flagy=false;
  39. if(flagy) b[lb]=u;//如果u節點可以放入b集合中
  40. if(flagy && dfs(u+, la, lb+)) return true;
  41. return false;
  42. }
  43.  
  44. int main(){
  45. while(scanf("%d", &n)!=EOF){
  46. memset(g, , sizeof(g));
  47. for(int i=; i<=n; ++i){
  48. int v;
  49. vis[i]=;
  50. while(scanf("%d", &v) && v)
  51. g[i][v]=;
  52. }
  53. flag=dfs(, , );
  54. if(flag)
  55. printf("YES\n");
  56. else printf("NO\n");
  57. }
  58. return ;
  59. }
  1. /*************************************************************************
  2. > File Name: j.cpp
  3. > Author: HJZ
  4. > Mail: 2570230521@qq.com
  5. > Created Time: 2014年08月28日 星期四 12时26分13秒
  6. ************************************************************************/
  7. //思路:bfs,和判断二分图差不多,将图分成两个集合,如果a和b都有g[a][b]&&g[b][a]说明
  8. //a和b一定在同一个集合中,如果有a,b不在一个集合中,a,c不在同一个集合中,b,c也不在同一个
  9. //集合中,出现矛盾!也就是这个图不能分成两个完全图!
  10. #include <queue>
  11. #include <string>
  12. #include <cstdio>
  13. #include <stack>
  14. #include <cstring>
  15. #include <iostream>
  16. #include <algorithm>
  17. #define N 105
  18. using namespace std;
  19. queue<int>q;
  20. int g[N][N];
  21. int coll[N];
  22. int n;
  23.  
  24. bool bfs(int u){
  25. while(!q.empty()) q.pop();
  26. q.push(u);
  27. while(!q.empty()){
  28. int x=q.front();
  29. q.pop();
  30. for(int y=; y<=n; ++y){
  31. if(x==y || g[x][y]&&g[y][x]) continue;
  32. if(coll[y]==-){
  33. coll[y]=coll[x]^;
  34. q.push(y);
  35. }
  36. else if(coll[y]==coll[x])
  37. return true;
  38. }
  39. }
  40. return false;
  41. }
  42.  
  43. int main(){
  44. while(scanf("%d", &n)!=EOF){
  45. memset(g, , sizeof(g));
  46. for(int i=; i<=n; ++i){
  47. int v;
  48. while(scanf("%d", &v) && v)
  49. g[i][v]=;
  50. coll[i]=-;
  51. }
  52. int i;
  53. for(i=; i<=n; ++i){
  54. if(coll[i]==-){
  55. coll[i]=;//默认是在集合0中
  56. if(bfs(i)) break;
  57. }
  58. }
  59. if(i<=n) printf("NO\n");
  60. else printf("YES\n");
  61. }
  62. return ;
  63. }

hdu4751Divide Groups(dfs枚举完全图集合或者bfs染色)的更多相关文章

  1. poj 1753 Flip Game(bfs状态压缩 或 dfs枚举)

    Description Flip game squares. One side of each piece is white and the other one is black and each p ...

  2. POJ1288 Sly Number(高斯消元 dfs枚举)

    由于解集只为{0, 1, 2}故消元后需dfs枚举求解 #include<cstdio> #include<iostream> #include<cstdlib> ...

  3. POJ 2429 GCD & LCM Inverse (Pollard rho整数分解+dfs枚举)

    题意:给出a和b的gcd和lcm,让你求a和b.按升序输出a和b.若有多组满足条件的a和b,那么输出a+b最小的.思路:lcm=a*b/gcd   lcm/gcd=a/gcd*b/gcd 可知a/gc ...

  4. POJ 1270 Following Orders (拓扑排序,dfs枚举)

    题意:每组数据给出两行,第一行给出变量,第二行给出约束关系,每个约束包含两个变量x,y,表示x<y.    要求:当x<y时,x排在y前面.让你输出所有满足该约束的有序集. 思路:用拓扑排 ...

  5. HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)

    想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...

  6. POJ 1753 Flip Game (DFS + 枚举)

    题目:http://poj.org/problem?id=1753 这个题在開始接触的训练计划的时候做过,当时用的是DFS遍历,其机制就是把每一个棋子翻一遍.然后顺利的过了.所以也就没有深究. 省赛前 ...

  7. Day054--MySQL, 创建用户和授权, 数据类型, 枚举和集合, 约束,唯一, 主键,外键

    创建用户和授权 1.创建用户: # 指定ip:192.118.1.1的mjj用户登录 create user 'mjj'@'192.118.1.1' identified by '123'; # 指定 ...

  8. 数据结构作业——图的存储及遍历(邻接矩阵、邻接表+DFS递归、非递归+BFS)

    邻接矩阵存图 /* * @Author: WZY * @School: HPU * @Date: 2018-11-02 18:35:27 * @Last Modified by: WZY * @Las ...

  9. HDU1045 Fire Net(DFS枚举||二分图匹配) 2016-07-24 13:23 99人阅读 评论(0) 收藏

    Fire Net Problem Description Suppose that we have a square city with straight streets. A map of a ci ...

随机推荐

  1. 利用反射实现类通用的DAO层

    public void add(Object object) throws SQLException { ResultSet rs=null; PreparedStatement ps=null; C ...

  2. python学习八皇后问题

    0 # -*- coding: utf-8 -*- 1 import random #冲突检查,在定义state时,采用state来标志每个皇后的位置,其中索引用来表示横坐标,基对应的值表示纵坐标,例 ...

  3. storysnail的Linux串口编程笔记

    storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据Ge ...

  4. pthread——pthread_cleanup

    Pthread_cleanup用于注册线程清理函数,注册的清理函数将在线程被取消或者主动调用pthread_exit时被调用:     一个简单的示例: #include <pthread.h& ...

  5. Linux 安装Weblogic12 - copy

    # groupadd weblogic# useradd -g weblogic weblogic# passwd weblogic# mkdir -p /var/bea# chown -R webl ...

  6. 用JQ仿造礼德财富网的图片查看器

    现在就职于一家P2P平台,自然也会关注同行其它网站的前端技术,今天要仿造的是礼德内页的一个图片查看器效果.不过说白了,无论人人贷也好礼德财富也好,很多地方的前端都做的不尽如人意,比如忽略细节.缺乏交互 ...

  7. ENode 1.0 - Staged Event-Driven Architecture思想的运用

    开源地址:https://github.com/tangxuehua/enode 上一篇文章,简单介绍了enode框架的command service api设计思路.本文介绍一下enode框架对St ...

  8. HOOK技术的一些简单总结

    好久没写博客了, 一个月一篇还是要尽量保证,今天谈下Hook技术. 在Window平台上开发任何稍微底层一点的东西,基本上都是Hook满天飞, 普通应用程序如此,安全软件更是如此, 这里简单记录一些常 ...

  9. Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境

    引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...

  10. Azure China (8) 使用Azure PowerShell创建虚拟机,并设置固定Virtual IP Address和Private IP

    <Windows Azure Platform 系列文章目录> 本文介绍的是由世纪互联运维的Windows Azure China. 相比于Global Azure (http://www ...