1128. Partition into Groups(图着色bfs)
写的dfs貌似不太对 bfs重写
用bfs将图进行黑白染色 如果有超过一个与自己颜色相同的点 就把该点存入栈中 最后处理栈中的点 判断此点是否合法 不合法 取反 取反后再判断相邻点是否合法 不合法再存入栈中 直到栈为空
- #include <iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<stdlib.h>
- #include<vector>
- #include<queue>
- using namespace std;
- #define N 80010
- vector<int>ed[N];
- int n;
- int vis[N],d[N],f[N],g;
- void bfs(int s)
- {
- int i;
- queue<int>q;
- q.push(s);
- vis[s] = ;
- while(!q.empty())
- {
- int u = q.front();
- q.pop();
- int k = vis[u];
- int num = ;
- for(i = ; i < (int)ed[u].size() ;i++)
- {
- int v = ed[u][i];
- if(!vis[v])
- {
- vis[v] = -k;
- q.push(v);
- }
- else if(vis[v]!=-k)
- {
- num++;
- }
- }
- if(num>)
- {
- g++;
- d[g] = u;
- }
- }
- }
- int main()
- {
- int m,i,j;
- scanf("%d",&n);
- for(i = ; i <= n ; i++)
- {
- scanf("%d",&m);
- for(j = ; j <= m ; j++)
- {
- int a;
- scanf("%d",&a);
- ed[i].push_back(a);
- }
- }
- for(i = ; i <= n ; i++)
- {
- if(!vis[i]&&!f[i])
- {
- bfs(i);
- }
- }
- for(i = ; i <= g ; i++)
- {
- int v = d[i],num=;
- for(j = ; j < (int)ed[v].size() ; j++)
- {
- int x = ed[v][j];
- if(vis[x]==vis[v])
- num++;
- }
- if(num>)
- {
- vis[v] = -vis[v];
- for(j = ; j < (int)ed[v].size() ; j++)
- {
- int x = ed[v][j],oo=;
- for(int p = ; p < (int)ed[x].size() ; p++)
- if(vis[x]==vis[ed[x][p]])
- {
- oo++;
- }
- if(oo>)
- {
- g++;
- d[g] = x;
- }
- }
- }
- }
- int num = ,o=-,t;
- for(i = ; i <= n ; i++)
- if(vis[i]==)
- {
- if(i==)
- o = ;
- num++;
- }
- if(num<n-num)
- {
- t = ;
- }
- else if(num==n-num)
- {
- t = o;
- }
- else
- {
- num = n-num;
- t = -;
- }
- printf("%d\n",num);
- for(i = ; i <= n ; i++)
- if(vis[i]==t)
- printf("%d ",i);
- puts("");
- return ;
- }
1128. Partition into Groups(图着色bfs)的更多相关文章
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/19617187 图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS ...
- ACM:图的BFS,走迷宫
题目: 一个网格迷宫由n行m列的单元格组成,每一个单元格要么是空地(用1表示),要么是障碍物(用0来表示).你的任务是找一条从起点到终点的最短移动序列,当中UDLR分别表示往上.下.左.右移动到相邻单 ...
- 图之BFS和DFS遍历的实现并解决一次旅游中发现的问题
这篇文章用来复习使用BFS(Breadth First Search)和DFS(Depth First Search) 并解决一个在旅游时遇到的问题. 关于图的邻接表存储与邻接矩阵的存储,各有优缺点. ...
- 图的BFS代码
图是严蔚敏书上P168的图, 图的邻接表存储,DFS可以看以前写的文章:http://www.cnblogs.com/youxin/archive/2012/07/28/2613362.html ]; ...
- 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 ...
- 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 ...
- UVA-10047 The Monocycle (图的BFS遍历)
题目大意:一张图,问从起点到终点的最短时间是多少.方向转动也消耗时间. 题目分析:图的广度优先遍历... 代码如下: # include<iostream> # include<cs ...
- CodeForces 131D【图特性+BFS】
题意: 只有一个环,然后环都是0(环缩点相当于树的根),然后其余的输出到根的距离 思路: 可以从度为1的 开始搜 把那些分支全标记掉,然后再取没有标记掉的,BFS一下搞出距离. 具体这个标记: 倒着搜 ...
- 算法学习记录-图(DFS BFS)
图: 目录: 1.概念 2.邻接矩阵(结构,深度/广度优先遍历) 3.邻接表(结构,深度/广度优先遍历) 图的基本概念: 数据元素:顶点 1.有穷非空(必须有顶点) 2.顶点之间为边(可空) 无向图: ...
随机推荐
- 虚拟机备份转移后,网络启动异常,提示“SIOCSIFADDR: No such device”的解决方案
虚拟机管理软件:Oracle VirturalBox Manager 4.0.8 虚拟机:Ubuntu Server 10.10 i386 The problem lies in the fact t ...
- 管道Pipe
管道Pipe java.nio.channels包中含有一个名为Pipe(管道)的类.广义上讲,管道就是一个用来在两个实体之间单向传输数据的导管.管道的概念对于Unix(和类Unix)操作系统的用户来 ...
- 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 ...
- sysconf和pathconf使用
问题描述: 查看系统运行时的限制值 问题解决: 执行效果: 源代码:
- hibernate Session
转: http://kayo.iteye.com/blog/204143 Session 接口 Session 接口对于Hibernate 开发人员来说是一个最重要的接口.然而在Hibernate 中 ...
- Mac和iOS开发资源汇总
小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D). 今天(2013年7月19日)收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大 ...
- httpsClient抓取证书
在执行webservice的过程中,出现如下异常: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExcep ...
- Java的synchronized关键字:同步机制总结
JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块.搞清楚synchronized锁定的是哪个对象,就能帮助我们设计更安全的多线程程 ...
- ZOJ 3778 Talented Chef(找规律,模拟计算,11届ACM省赛,简单)
题目链接 2014年浙江省赛C题,当时觉得难,现在想想这题真水.. 找规律: 若 最大的那个步骤数*m-总和>=0,那么答案就是 最大的那个步骤数 . 否则 就要另加上不够的数量,具体看代 ...
- POJ 3411 Paid Roads(SPFA || DFS)
题目链接 题意 : 要从1城市到n城市,求最短路是多少,从a城市到达b城市的路程,如果你到过c城市,则需要走p,否则走r长. 思路 : 因为可以来回走,所以不能用单纯的最短路,可以用二维SPFA,状态 ...