1128

写的dfs貌似不太对 bfs重写

用bfs将图进行黑白染色 如果有超过一个与自己颜色相同的点 就把该点存入栈中 最后处理栈中的点 判断此点是否合法 不合法 取反 取反后再判断相邻点是否合法 不合法再存入栈中 直到栈为空 

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<stdlib.h>
  6. #include<vector>
  7. #include<queue>
  8. using namespace std;
  9. #define N 80010
  10. vector<int>ed[N];
  11. int n;
  12. int vis[N],d[N],f[N],g;
  13. void bfs(int s)
  14. {
  15. int i;
  16. queue<int>q;
  17. q.push(s);
  18. vis[s] = ;
  19. while(!q.empty())
  20. {
  21. int u = q.front();
  22. q.pop();
  23. int k = vis[u];
  24. int num = ;
  25. for(i = ; i < (int)ed[u].size() ;i++)
  26. {
  27. int v = ed[u][i];
  28. if(!vis[v])
  29. {
  30. vis[v] = -k;
  31. q.push(v);
  32. }
  33. else if(vis[v]!=-k)
  34. {
  35. num++;
  36. }
  37. }
  38. if(num>)
  39. {
  40. g++;
  41. d[g] = u;
  42. }
  43. }
  44. }
  45. int main()
  46. {
  47. int m,i,j;
  48. scanf("%d",&n);
  49. for(i = ; i <= n ; i++)
  50. {
  51. scanf("%d",&m);
  52. for(j = ; j <= m ; j++)
  53. {
  54. int a;
  55. scanf("%d",&a);
  56. ed[i].push_back(a);
  57. }
  58. }
  59. for(i = ; i <= n ; i++)
  60. {
  61. if(!vis[i]&&!f[i])
  62. {
  63. bfs(i);
  64. }
  65. }
  66. for(i = ; i <= g ; i++)
  67. {
  68. int v = d[i],num=;
  69. for(j = ; j < (int)ed[v].size() ; j++)
  70. {
  71. int x = ed[v][j];
  72. if(vis[x]==vis[v])
  73. num++;
  74. }
  75. if(num>)
  76. {
  77. vis[v] = -vis[v];
  78. for(j = ; j < (int)ed[v].size() ; j++)
  79. {
  80. int x = ed[v][j],oo=;
  81. for(int p = ; p < (int)ed[x].size() ; p++)
  82. if(vis[x]==vis[ed[x][p]])
  83. {
  84. oo++;
  85. }
  86. if(oo>)
  87. {
  88. g++;
  89. d[g] = x;
  90. }
  91. }
  92. }
  93. }
  94. int num = ,o=-,t;
  95. for(i = ; i <= n ; i++)
  96. if(vis[i]==)
  97. {
  98. if(i==)
  99. o = ;
  100. num++;
  101. }
  102. if(num<n-num)
  103. {
  104. t = ;
  105. }
  106. else if(num==n-num)
  107. {
  108. t = o;
  109. }
  110. else
  111. {
  112. num = n-num;
  113. t = -;
  114. }
  115. printf("%d\n",num);
  116. for(i = ; i <= n ; i++)
  117. if(vis[i]==t)
  118. printf("%d ",i);
  119. puts("");
  120. return ;
  121. }

1128. Partition into Groups(图着色bfs)的更多相关文章

  1. 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/19617187 图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS ...

  2. ACM:图的BFS,走迷宫

    题目: 一个网格迷宫由n行m列的单元格组成,每一个单元格要么是空地(用1表示),要么是障碍物(用0来表示).你的任务是找一条从起点到终点的最短移动序列,当中UDLR分别表示往上.下.左.右移动到相邻单 ...

  3. 图之BFS和DFS遍历的实现并解决一次旅游中发现的问题

    这篇文章用来复习使用BFS(Breadth First Search)和DFS(Depth First Search) 并解决一个在旅游时遇到的问题. 关于图的邻接表存储与邻接矩阵的存储,各有优缺点. ...

  4. 图的BFS代码

    图是严蔚敏书上P168的图, 图的邻接表存储,DFS可以看以前写的文章:http://www.cnblogs.com/youxin/archive/2012/07/28/2613362.html ]; ...

  5. PAT A1076 Forwards on Weibo (30 分)——图的bfs

    Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...

  6. PAT A1021 Deepest Root (25 分)——图的BFS,DFS

    A graph which is connected and acyclic can be considered a tree. The hight of the tree depends on th ...

  7. UVA-10047 The Monocycle (图的BFS遍历)

    题目大意:一张图,问从起点到终点的最短时间是多少.方向转动也消耗时间. 题目分析:图的广度优先遍历... 代码如下: # include<iostream> # include<cs ...

  8. CodeForces 131D【图特性+BFS】

    题意: 只有一个环,然后环都是0(环缩点相当于树的根),然后其余的输出到根的距离 思路: 可以从度为1的 开始搜 把那些分支全标记掉,然后再取没有标记掉的,BFS一下搞出距离. 具体这个标记: 倒着搜 ...

  9. 算法学习记录-图(DFS BFS)

    图: 目录: 1.概念 2.邻接矩阵(结构,深度/广度优先遍历) 3.邻接表(结构,深度/广度优先遍历) 图的基本概念: 数据元素:顶点 1.有穷非空(必须有顶点) 2.顶点之间为边(可空) 无向图: ...

随机推荐

  1. 虚拟机备份转移后,网络启动异常,提示“SIOCSIFADDR: No such device”的解决方案

    虚拟机管理软件:Oracle VirturalBox Manager 4.0.8 虚拟机:Ubuntu Server 10.10 i386 The problem lies in the fact t ...

  2. 管道Pipe

    管道Pipe java.nio.channels包中含有一个名为Pipe(管道)的类.广义上讲,管道就是一个用来在两个实体之间单向传输数据的导管.管道的概念对于Unix(和类Unix)操作系统的用户来 ...

  3. Codeforces Round #238 (Div. 2) D. Toy Sum 暴搜

    题目链接: 题目 D. Toy Sum time limit per test:1 second memory limit per test:256 megabytes 问题描述 Little Chr ...

  4. sysconf和pathconf使用

    问题描述:          查看系统运行时的限制值 问题解决: 执行效果: 源代码:

  5. hibernate Session

    转: http://kayo.iteye.com/blog/204143 Session 接口 Session 接口对于Hibernate 开发人员来说是一个最重要的接口.然而在Hibernate 中 ...

  6. Mac和iOS开发资源汇总

    小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D). 今天(2013年7月19日)收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大 ...

  7. httpsClient抓取证书

    在执行webservice的过程中,出现如下异常: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExcep ...

  8. Java的synchronized关键字:同步机制总结

    JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块.搞清楚synchronized锁定的是哪个对象,就能帮助我们设计更安全的多线程程 ...

  9. ZOJ 3778 Talented Chef(找规律,模拟计算,11届ACM省赛,简单)

    题目链接 2014年浙江省赛C题,当时觉得难,现在想想这题真水.. 找规律: 若   最大的那个步骤数*m-总和>=0,那么答案就是 最大的那个步骤数 . 否则  就要另加上不够的数量,具体看代 ...

  10. POJ 3411 Paid Roads(SPFA || DFS)

    题目链接 题意 : 要从1城市到n城市,求最短路是多少,从a城市到达b城市的路程,如果你到过c城市,则需要走p,否则走r长. 思路 : 因为可以来回走,所以不能用单纯的最短路,可以用二维SPFA,状态 ...