/*************************************************************************
> File Name: j.cpp
> Author: HJZ
> Mail: 2570230521@qq.com
> Created Time: 2014年08月28日 星期四 12时26分13秒
************************************************************************/ //提議:能否將一個給定的有向圖,變成兩個完全圖(任意兩點都直接相連,雙向邊) #include <queue>
#include <string>
#include <cstdio>
#include <stack>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 105
using namespace std; int a[N], b[N];
//a, b集合初始化爲空!
int g[N][N];
int n; bool flag; bool dfs(int u, int la, int lb){
if(u>n && la+lb==n) return true;//如果a ,b集合中的元素數目恰好是n,則說明可以形成兩個完全圖!
bool flagx=true;
for(int i=; i<la && flagx; ++i)
if(!(g[a[i]][u] && g[u][a[i]]))
flagx=false;
if(flagx) a[la]=u;//如果u節點可以放入a集合中
if(flagx && dfs(u+, la+, lb)) return true;
bool flagy=true;
for(int i=; i<lb && flagy; ++i)
if(!(g[b[i]][u] && g[u][b[i]]))
flagy=false;
if(flagy) b[lb]=u;//如果u節點可以放入b集合中
if(flagy && dfs(u+, la, lb+)) return true;
return false;
} int main(){
while(scanf("%d", &n)!=EOF){
memset(g, , sizeof(g));
for(int i=; i<=n; ++i){
int v;
vis[i]=;
while(scanf("%d", &v) && v)
g[i][v]=;
}
flag=dfs(, , );
if(flag)
printf("YES\n");
else printf("NO\n");
}
return ;
}
 /*************************************************************************
> File Name: j.cpp
> Author: HJZ
> Mail: 2570230521@qq.com
> Created Time: 2014年08月28日 星期四 12时26分13秒
************************************************************************/
//思路:bfs,和判断二分图差不多,将图分成两个集合,如果a和b都有g[a][b]&&g[b][a]说明
//a和b一定在同一个集合中,如果有a,b不在一个集合中,a,c不在同一个集合中,b,c也不在同一个
//集合中,出现矛盾!也就是这个图不能分成两个完全图!
#include <queue>
#include <string>
#include <cstdio>
#include <stack>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 105
using namespace std;
queue<int>q;
int g[N][N];
int coll[N];
int n; bool bfs(int u){
while(!q.empty()) q.pop();
q.push(u);
while(!q.empty()){
int x=q.front();
q.pop();
for(int y=; y<=n; ++y){
if(x==y || g[x][y]&&g[y][x]) continue;
if(coll[y]==-){
coll[y]=coll[x]^;
q.push(y);
}
else if(coll[y]==coll[x])
return true;
}
}
return false;
} int main(){
while(scanf("%d", &n)!=EOF){
memset(g, , sizeof(g));
for(int i=; i<=n; ++i){
int v;
while(scanf("%d", &v) && v)
g[i][v]=;
coll[i]=-;
}
int i;
for(i=; i<=n; ++i){
if(coll[i]==-){
coll[i]=;//默认是在集合0中
if(bfs(i)) break;
}
}
if(i<=n) printf("NO\n");
else printf("YES\n");
}
return ;
}

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. Mac os x下配置nginx + php

    一直都没使用过PHP的,最近leader推荐使用他在维护的一个移动端的js框架,在本地合并压缩使用的是php环境处理的,so,只能是搭一个PHP的环境了.一直使用的本地代理服务器都是nginx,虽然P ...

  2. node安装笔记

    安装node.js1.下载node可以直接下载二进制,也可以下载源代码再安装.我选择下载二进制: https://nodejs.org/dist/v4.6.0/node-v4.6.0-linux-x6 ...

  3. 一个demo让你彻底理解Android触摸事件的并发

    注:本文涉及的demo的地址:https://github.com/absfree/TouchDispatch 1. 触摸动作及事件序列 (1)触摸事件的动作 触摸动作一共有三种:ACTION_DOW ...

  4. SSIS 错误

    [OLE DB 源 [1]] 错误: SSIS 错误代码 DTS_E_OLEDBERROR.出现 OLE DB 错误.错误代码: 0x80040E14.已获得 OLE DB 记录.源:"Or ...

  5. 初学python里的yield send next

    今天看书的时候突然看到这个想起来一直没有怎么使用过send和next试了一下 发现了一个诡异的问题 import math def get_primes(start): while 1 : if is ...

  6. week 4 日志

    周一 上上个星期感冒,上个星期看完奇幻森林后痔疮发作,打了整整一礼拜的针,有点背.. 今天看了 css知多少(6)——选择器的优先级 http://www.cnblogs.com/wangfupeng ...

  7. 需要知道关于struct的一些事情

    前言 重构代码的时候,会遇到长参数的方法,此时就需要使用“引入参数对象”来封装这些参数.大多数时候,这些参数都是简单类型,而且所有参数的值占用的空间也不是非常的大,此时使用对象真的好吗?对象的特性是堆 ...

  8. dojo/aspect源码解析

    dojo/aspect模块是dojo框架中对于AOP的实现.关于AOP的详细解释请读者另行查看其它资料,这里简单复习一下AOP中的基本概念: 切面(Aspect):其实就是共有功能的实现.如日志切面. ...

  9. 第三次作业:PSP耗时

    PSP个人项目耗时对比记录表:四则运算   Personal Software Process Stages Time(%) Planning 7  Estimate 9 开发 76    •需求分析 ...

  10. 【吉光片羽】ie6兼容性的几个点

    1.浮动换行.自己写个导航,li向左浮动,到ie6下全部错开了. --> 还是在现有bootstrap框架的基础上修改样式保险一些. <div id="mymenu" ...