1182 食物链

原创 2007年10月15日 08:32:00
食物链
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 5041   Accepted: 1128

Description
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。
现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。
有人用两种说法对这N个动物所构成的食物链关系进行描述:
第一种说法是"1 X Y",表示X和Y是同类。
第二种说法是"2 X Y",表示X吃Y。
此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。
1) 当前的话与前面的某些真的话冲突,就是假话;
2) 当前的话中X或Y比N大,就是假话;
3) 当前的话表示X吃X,就是假话。
你的任务是根据给定的N(1 <= N <= 50,000)和K句话(0 <= K <= 100,000),输出假话的总数。

Input
第一行是两个整数N和K,以一个空格分隔。
以下K行每行是三个正整数 D,X,Y,两数之间用一个空格隔开,其中D表示说法的种类。
若D=1,则表示X和Y是同类。
若D=2,则表示X吃Y。

Output
只有一个整数,表示假话的数目。

Sample Input

 

Sample Output

 

Source
Noi 01

 ******************************************************************************************

*************************************************************************************

Source Code
#include <stdio.h>
#define maxn 50004

int  parent[maxn];
int    relation[maxn];   
 int result[][3]={1 , -1 , 0, 0 , 1 , -1 , -1 , 0 , 1};
 int result2[][3]={0 , 1 , -1 , -1 , 0 , 1 , 1 , -1 , 0};
 int next[][3]={1 , -1 , 0 , -1 , 0 , 1 , 0 , 1 , -1};
 int behind[][3]={0 , -1 , 1 , 1 , 0 , -1 , -1 , 1 , 0};

 void find(int x,int &y,int &d)
 {
    int z,r,now;
	d=0;z=x;
	 while (parent[x] > 0)
	 { d = next[d+1][relation[x]+1];
        x = parent[x];
     }
	 y = x; now = d;

	  while (z !=y )
	 { 
		  x = parent[z];
        parent[z] = y;
        r = relation[z];
        relation[z] = now;
        now = behind[now+1][r+1];
        z = x;
     } 
 }

 void merge(int a,int b,int r)
 {
   if(parent[a]>parent[b])
     {
	    parent[b] = parent[a] + parent[b];
        parent[a] = b;
        relation[a] = r;
     }
   else {
          parent[a] = parent[a] + parent[b];
        parent[b] = a;
        relation[b] = -r;
        }
 
 }

int main()
{
	 int n , k , lie , i ;    
     int x , y , a , b   ;  
     int u , v , d , nr  ;
	scanf("%d%d",&n,&k);

	for(i=1;i<=n;i++)
	{
	   parent[i] = -1;
      relation[i] = 0;
	}

	lie=0;
	for(i=1;i<=k;i++)
	{
	  scanf("%d%d%d",&d,&x,&y);
	  if(x>n||y>n)
		{
	      lie+=1;
		  continue;
	    }
       find(x , a , u);
       find(y , b , v);
	   if(d==2)  nr = result[u+1][v+1];
	   else  nr = result2[u+1][v+1];
          if(a==b)
		{
		  if(nr!=0) 
			  lie+=1;
		}

		else   merge(a , b , nr);
 
	}

	  printf("%d/n",lie);	
	return 0;
}

 

3

 

100 7
1 101 1 
2 1 2
2 2 3 
2 3 3 
1 1 3 
2 3 1 
1 5 5

在对话框中显示网页,并屏蔽掉IE的弹出式菜单

    在对话框中显示网页并不是个新鲜的话题,但要将IE的那个讨的厌的弹出式菜单去掉,可不是件容易的事,可能很多的程序员都作过尝试,显然地,捕获WM_RBUTTONDOWN,WM_RBUTTONUP,...
  • wuya
  • wuya
  • 2001-07-12 17:45:00
  • 1589

食物链 POJ1182 -- 并查集

食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26553   Accepted:...
  • tiantangrenjian
  • tiantangrenjian
  • 2011-12-19 21:06:24
  • 9537

POJ1182 - 食物链(带权并查集)

题目链接:http://poj.org/problem?id=1182题目大意:动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-...
  • ACM_Fish
  • ACM_Fish
  • 2017-05-13 10:25:23
  • 976

poj 1182 食物链(经典!种类并查集)

链接: http://poj.org/problem?id=1182 原题: Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形...
  • shuangde800
  • shuangde800
  • 2012-09-24 00:10:11
  • 7504

【POJ1182】食物链,思路+数据+代码,可能是史上关于这道题最详细的解题报告

#include #include #include #include //#define INPUT /** Problem:1182 - 食物链,NOI2001 Begin...
  • c0de4fun
  • c0de4fun
  • 2012-03-04 19:54:09
  • 20570

poj 1182 食物链(并查集)

食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 48054   Accepted: 14008 D...
  • jxust_tj
  • jxust_tj
  • 2015-02-09 13:00:02
  • 2621

POJ-1182食物链(并查集的运用)

Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它...
  • u014004096
  • u014004096
  • 2015-03-21 23:43:40
  • 570

hdu1182食物链

这道题是并查集的稍微难一点的应用因为有三个元素,详细代码及讲解如下#include #include using namespace std; int pre[150005]; int find(...
  • zcmartin2014214283
  • zcmartin2014214283
  • 2016-03-15 18:12:37
  • 458

【poj 1182】 食物链 题解&代码(C++)

poj 并查集
  • DERITt
  • DERITt
  • 2016-04-05 20:30:50
  • 1431

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

Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。  现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道...
  • gemire
  • gemire
  • 2014-03-05 20:27:26
  • 4784
收藏助手
不良信息举报
您举报文章:1182 食物链
举报原因:
原因补充:

(最多只允许输入30个字)