A Bug's Life(向量偏移)

A Bug‘s Life

Time Limit : 15000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 97   Accepted Submission(s) : 38

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

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 OutpuScenario #1、

Suspicious bugs foundScenario #2:

No suspicious bugs found!http://blog.csdn.net/shuangde800/article/details/7974664这位大佬写的向量偏移非常阅读后这题就非常容易了;就是他写的方程有点奇怪;我自己觉得是这样的:aa->bb=(-delta[a]+d-1+delta[b])%3;a->b=(delta[a]-delta[b])%3;

这题题意用一组数据来说明吧1 2;2 3;1 3
1和2是异性,2和3也是异性,也就是1和3是同性,但是他有将a 和b是异性。出现了bug;
 1 #include <cstring>
 2 #include<stdio.h>
 3 int p[55000];
 4 int f[55000];//i的根节点到i的偏移量
 5 int flag;
 6
 7 int findi(int x)
 8 {
 9     if(p[x]==x)
10         return x;
11     int t=p[x];
12     p[x]=findi(p[x]);
13     f[x]=(f[x]+f[t])%2;
14     return p[x];
15 }
16 void unioni(int x,int y)
17 {
18     int fx=findi(x);
19     int fy=findi(y);
20     p[fx]=fy;
21     f[fx]=(f[y]-f[x]+1)%2;
22     return ;
23 }
24
25 int main (){
26     int t;
27
28     scanf("%d",&t);
29     int k=1;
30     while(t--)
31         {
32         flag=0;
33         int n,m;
34         scanf("%d%d",&n,&m);
35         for(int i=1;i<=n;++i){
36             p[i]=i;
37             f[i]=0;
38         }
39         int a,b;
40         while(m--){
41             scanf("%d%d",&a,&b);
42             int fa=findi(a);
43             int fb=findi(b);
44             if(fa==fb){
45                 if(f[a]==f[b])
46                 flag=1;
47             }
48             else unioni(a,b);
49         }
50         if(flag)
51              printf("Scenario #%d:\nSuspicious bugs found!\n\n",k++);
52         else
53              printf("Scenario #%d:\nNo suspicious bugs found!\n\n",k++);
54     }
55     return 0;
56 }

A Bug's Life(向量偏移)

时间: 2024-10-07 17:44:46

A Bug's Life(向量偏移)的相关文章

POJ 2492 A Bug&#39;s Life (带权并查集 &amp;&amp; 向量偏移)

题意 : 给你 n 只虫且性别只有公母, 接下来给出 m 个关系, 这 m 个关系中都是代表这两只虫能够交配, 就是默认异性, 问你在给出的关系中有没有与异性交配这一事实相反的, 即同性之间给出了交配关系. 分析 : 本题雷同POJ 1182 食物链, 如果会了那一题, 那现在这题便简单多了, 建议先了解食物链的偏移向量做法.这里也是使用向量的思考方式来进行relation的变化, 这里我令 relation = 0为同性, relation = 1为异性, 接下来的步骤就和食物链的雷同了. 优

并查集——向量偏移

让我们用一道题来说明这个问题吧 题目连接:http://poj.org/problem?id=1182 我们先不妨假设a与b是同类的时候偏移量为0 a吃b的时候偏移量1 a被b吃的时候偏移量为2   a的父亲节点为aa b的父亲节点为bb 有了这个假设,那下面就能很方便解决这个问题了 我们先查找给出节点的父亲节点然后看看父亲节点的是不是相同的 如果是不相同的那么我们就更新b的父亲节点的偏移量 先看一张图片 由图片可知   p[fx].relation = (3 + p[y].relation -

POJ 1182 食物链 (带权并查集 &amp;&amp; 向量偏移)

题意 : 中文题, 直接去POJ  1182看即可 分析 : 通过普通并查集的整理归类, 能够单纯地知道某些元素是否在同一个集合内.但是题目不仅只有种类之分, 还有种类之间的关系, 即同类以及吃与被吃, 而且重点是题目问的并不是种类是否在一个集合内, 而是考察给出的关系是否矛盾.在解释之前, 先明白一个问题, 对于给出的关系, 如果我不能通过前面的信息来推断出来, 是不是不能够判断现在给出关系的对错?那就将这个信息作为真命题并存储起来, 方便后面判断.有了刚刚前面的陈述, 可以知道两个东西=>

poj 1182 (扩展并查集)

食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 58979   Accepted: 17247 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同

POJ 1182 (经典食物链 /并查集扩展)

(參考他人资料) 向量偏移--由"食物链"引发的总结 http://poj.org/problem?id=1182这道食物链题目是并查集的变型.非常久曾经做的一次是水过的,这次细致地研究了这"食物链",无非就是运用向量偏移.从曾经节点与节点转化成向量与向量的关系.我们能够把矛盾的产生得益于向量偏移时的结果. 直接引出向量偏移的运用. 以下是POJ一位大牛这样理解的,本人稍有改动. 对于集合里的随意两个元素a,b而言,它们之间必然存在着某种联系,由于并查集中的元素

《高性能javascript》一书要点和延伸(下)

第六章 快速响应的用户界面 本章开篇介绍了浏览器UI线程的概念,我也突然想到一个小例子,这是写css3动画的朋友都经常会碰到的一个问题: <head> <meta charset="UTF-8"> <title>Title</title> <style> div{width:50px; height:50px; background:yellow;} .act{width:100px;transition:width 0.5s

hdu 3047(扩展并查集)

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2672    Accepted Submission(s): 1028 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built

POJ 1173 Find them, Catch them

题意:有两个帮派,每个人只属于一个帮派,m次操作,一种操作告诉你两个人不是一个帮派的,另一种操作问两个人是不是在一个帮派. 解法:并查集+向量偏移.偏移量表示和根节点是不是同一帮派,是为0,不是为1. 代码: #include<stdio.h> #include<iostream> #include<algorithm> #include<string> #include<string.h> #include<math.h> #inc

poj1182 食物链

食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 51148   Accepted: 14950 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同