A Bug's Life

Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 8528    Accepted Submission(s): 2745

Problem Description
Background 

Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of the opposite gender. In his experiment, individual bugs and their interactions were easy
to identify, because numbers were printed on their backs. 



Problem 

Given a list of bug interactions, decide whether the experiment supports his assumption of two genders with no homosexual bugs or if it contains some bug interactions that falsify it.
 
Input
The first line of the input contains the number of scenarios. Each scenario starts with one line giving the number of bugs (at least one, and up to 2000) and the number of interactions (up to 1000000) separated by a single space. In the following lines, each
interaction is given in the form of two distinct bug numbers separated by a single space. Bugs are numbered consecutively starting from one.
 
Output
The output for every scenario is a line containing "Scenario #i:", where i is the number of the scenario starting at 1, followed by one line saying either "No suspicious bugs found!" if the experiment is consistent with his assumption about the bugs' sexual
behavior, or "Suspicious bugs found!" if Professor Hopper's assumption is definitely wrong.
 
Sample Input
2
3 3
1 2
2 3
1 3
4 2
1 2
3 4
 
Sample Output
Scenario #1:
Suspicious bugs found! Scenario #2:
No suspicious bugs found!
Hint
Huge input,scanf is recommended.

利用黑白染色,推断是否是二分图。

#include"stdio.h"
#include"string.h"
#include"queue"
using namespace std;
#define N 2005
#define M 1000005
int n,m,t,head[N];
int color[N],flag;
struct node
{
int u,v,next;
}map[2*M];
void add(int u,int v)
{
map[t].u=u;
map[t].v=v;
map[t].next=head[u];
head[u]=t++;
map[t].u=v;
map[t].v=u;
map[t].next=head[v];
head[v]=t++;
}
void find(int u)
{
int i,v;
for(i=head[u];i!=-1;i=map[i].next)
{
v=map[i].v;
if(color[v]==-1)
{
color[v]=color[u]^1;
find(v);
}
else if(color[v]==color[u])
{
flag=1;
return ;
}
}
return ;
}
int main()
{
int i,T,u,v,cnt=1;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
t=0;
memset(head,-1,sizeof(head));
while(m--)
{
scanf("%d%d",&u,&v);
add(u,v);
}
memset(color,-1,sizeof(color));
flag=0;
for(i=1;i<=n;i++)
{
if(color[i]==-1)
{
color[i]=0;
find(i);
if(flag)
break;
}
}
printf("Scenario #%d:\n",cnt++);
if(flag)
printf("Suspicious bugs found!\n");
else
printf("No suspicious bugs found!\n");
puts("");
}
return 0;
}

带权并查集:

#include"stdio.h"
#include"string.h"
#include"queue"
#include"vector"
#include"stack"
#include"algorithm"
using namespace std;
#define N 2005
#define min(a,b) (a<b?a:b)
int pre[N],gen[N];
int find(int k)
{
if(k==pre[k])
return k;
int t=find(pre[k]); //不能马上更新父节点与根节点同样
gen[k]=gen[k]^gen[pre[k]];//由于该节点的性别和它的父节点相反
return pre[k]=t; //确定该点性别之后才干把该点父节点更新为根节点
}
int Union(int x,int y)
{
int a,b;
a=find(x);
b=find(y);
if(a==b) //x,y的根节点同样
{
if(gen[x]==gen[y]) //推断他们是否同性别
return 1;
return 0;
}
pre[a]=b;
gen[a]=(gen[x]+gen[y]+1)&1;
return 0;
}
int main()
{
int i,u,v,n,cnt=1,T,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=0;i<=n;i++)
pre[i]=i;
memset(gen,0,sizeof(gen));
int flag=0;
while(m--)
{
scanf("%d%d",&u,&v);
if(flag)
continue;
flag=Union(u,v);
}
printf("Scenario #%d:\n",cnt++);
if(flag)
printf("Suspicious bugs found!\n");
else
printf("No suspicious bugs found!\n");
puts("");
}
return 0;
}

hdu 1829 &amp;poj 2492 A Bug&#39;s Life(推断二分图、带权并查集)的更多相关文章

  1. POJ 2912 Rochambeau(难,好题,枚举+带权并查集)

    下面的是从该网站上copy过来的,稍微改了一点,给出链接:http://hi.baidu.com/nondes/item/26dd0f1a02b1e0ef5f53b1c7 题意:有N个人玩剪刀石头布, ...

  2. A Bug's Life POJ - 2492 (带权并查集)

    A Bug's Life POJ - 2492 Background Professor Hopper is researching the sexual behavior of a rare spe ...

  3. HDU 1829 A Bug's Life 【带权并查集/补集法/向量法】

    Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes ...

  4. hdu 1829-A Bug's LIfe(简单带权并查集)

    题意:Bug有两种性别,异性之间才交往, 让你根据数据判断是否存在同性恋,输入有 t 组数据,每组数据给出bug数量n, 和关系数m, 以下m行给出相交往的一对Bug编号 a, b.只需要判断有没有, ...

  5. poj2492 A Bug's Life(带权并查集)

    题目链接 http://poj.org/problem?id=2492 题意 虫子有两种性别,有n只虫子,编号1~n,输入m组数据,每组数据包含a.b两只虫子,表示a.b为不同性别的虫子,根据输入的m ...

  6. 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)

    题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离.问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则 ...

  7. 【poj 1988】Cube Stacking(图论--带权并查集)

    题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...

  8. POJ 1733 Parity game(离散化+带权并查集)

    离散化+带权并查集 题意:长度为n的0和1组成的字符串,然后问第L和R位置之间有奇数个1还是偶数个1. 根据这些回答, 判断第几个是错误(和之前有矛盾)的. 思路:此题同HDU 3038 差不多,询问 ...

  9. hdu 5441 Travel 离线带权并查集

    Travel Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5441 De ...

随机推荐

  1. [BZOJ5463][APIO2018]铁人两项(圆方树DP)

    题意:给出一张图,求满足存在一条从u到v的长度大于3的简单路径的有序点对(u,v)个数. 做了上一题[HDU5739]Fantasia(点双连通分量+DP),这个题就是一个NOIP题了. 一开始考虑了 ...

  2. SQLServer组成:

    SQL Server DB Engine (Relational Engine),SQL语言用于向Engine描述问题. Algebrizer:代数器,检查语法,并将查询转换成内部表达式 Query ...

  3. c# 播放mp3

    转载:http://www.cnblogs.com/igrl/archive/2010/03/29/1699975.html /// <summary> /// 播放MP3文件 /// & ...

  4. winform treeview 绑定文件夹和文件

    转载:http://www.cnblogs.com/zhbsh/archive/2011/05/26/2057733.html #region treeview 绑定文件夹和文件 /// <su ...

  5. jquery获取下拉列表的值和显示内容的方法

    页面的下拉列表: 选择时间段: <select name="timespan" id="timespan" class="Wdate" ...

  6. Linux使用GPT划分大于2T的分区

    在Linux下磁盘分区大于2TB的时候我不能使用常用fdisk命令,这时我们就需要先把大容量的磁盘进行转换为GPT格式,然后试用parted命令来划分大于2T的分区. 方法:1.用parted命令分区 ...

  7. kubelet分析

    kubelet是k8s中节点上运行的管理工具,它负责接受api-server发送的调度请求,在Node上创建管理pod,并且向api-server同步节点的状态.这篇文章主要讲讲kubelet组件如何 ...

  8. Coincidence (动态规划求最长公共子序列)(王道)

    题目描述: Find a longest common subsequence of two strings. 输入: First and second line of each input case ...

  9. autoconfig.xml与antx.properties一级application.properties之间的关系

    Java web项目中一般都有配置文件,文件中包含一些配置信息供Java工程启动和运行时使用,这些常见的配置文件大都是一些以.properties后缀的文件,比如常见的antx.properties以 ...

  10. hexo 使用教程

    hexo 使用教程 这个早就用起来了,写给需要的小伙伴 mayufo.github.io 先扔出自己的地址 安装 想玩hexo,需要安装以下应用 git node 安装完成在终端输入 $ npm in ...