算法思路:把那些确定了相对关系的节点放在同一棵树里(可以同时存在多棵树,单独每棵树中节点的相对关系确定),每个节点对应的 v[] 值记录他与根节点的关系( 0:同类; 1:根吃他; 2:他吃根 )。当不在同一棵树上时,只需把 aa,bb 两个根节点连接,并修改变成aa子结点的bb相对于aa的关系。这里 根据 a ,b分别对应于aa ,bb的关系(即:v[a] ,v[b])就可以确定 bb相对于新根aa的关系。v[bb] = (v[a]-v[b]+3+d)%3。v[b]代表b作为子结点与bb的关系,反过来bb作为子结点与b的关系则为-v[b],加3是为了防止出现负数。

import java.util.*;
import java.math.BigInteger;
public class Main
{
static int father[]=new int[50005],v[]= new int[50005];
public static int find(int x)
{ int y;
if(x!=father[x])
{
y=father[x];
father[x]=find(father[x]);
v[x]=(v[x]+v[y])%3;
}
else return x;
return father[x];
}
public static void link(int x,int y,int d)
{
int xx=find(x),yy=find(y);
father[yy]=xx;
v[yy]=(v[x]-v[y]+d+3)%3;
}
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int n,i,m,x,y,d,ans=0;
Arrays.fill(v, 0);
for(i=0;i<50005;i++)father[i]=i;
n=in.nextInt();m=in.nextInt();
while(m--!=0)
{
d=in.nextInt(); x=in.nextInt(); y=in.nextInt();
if(x>n||y>n) ans++;
else
if(d==1)
{
if(find(x)!=find(y)) link(x,y,0);
else if(v[x]!=v[y]) ans++;
}
else
{
if(find(x)!=find(y)) link(x,y,1);
else if((v[x]+1)%3!=v[y]) ans++;
}
}
System.out.println(ans); }
}

poj 1182食物链(并查集)的更多相关文章

  1. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

  2. poj 1182 食物链 并查集 题解《挑战程序设计竞赛》

    地址 http://poj.org/problem?id=1182 题解 可以考虑使用并查集解决 但是并不是简单的记录是否同一组的这般使用 每个动物都有三个并查集 自己 天敌 捕食 并查集 那么在获得 ...

  3. POJ 1182 食物链(并查集的使用)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 81915   Accepted: 24462 Description ...

  4. poj 1182 食物链 并查集的又一个用法

    食物链   Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 41584   Accepted: 12090 Descripti ...

  5. POJ 1182食物链(并查集)

    食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 85474 Accepted: 25549Description动物王国中有三 ...

  6. POJ - 1182 食物链 并查集经典

    思路:设r(x)表示节点x与根结点的关系,px表示x的根结点.记录每个节点与其父节点的关系,就能很方便知道每个节点以及和它的父节点的关系. struct node{ int par; //父亲节点 i ...

  7. poj——1182食物链 并查集(提升版)

    因为是中文题,题意就不说了,直接说思路: 我们不知道给的说法中的动物属于A B C哪一类,所以我们可以用不同区间的数字表示这几类动物,这并不影响结果,我们可以用并查集把属于一类的动物放在一块,举个例子 ...

  8. POJ 1182 食物链 (并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 50601   Accepted: 14786 Description ...

  9. POJ 1182 食物链(并查集)

    题目链接 经过宝哥的讲解,终于对这种问题有了进一步的理解.根据flag[x]和flag[y]求flag[tx]是最关键的了. 0吃1,1吃2,2吃0. 假设flag[tx] = X; 那么X + fl ...

  10. poj 1182 (关系并查集) 食物链

    题目传送门:http://poj.org/problem?id=1182 这是一道关系型并查集的题,对于每个动物来说,只有三种情况:同类,吃与被吃: 所以可以用0,1,2三个数字代表三种情况,在使用并 ...

随机推荐

  1. C++日期和时间

    C++ 日期 & 时间 C++ 标准库没有提供所谓的日期类型.C++ 继承了 C 语言用于日期和时间操作的结构和函数.为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <c ...

  2. Android中利用httpclient进行网络通信的方法(以用户登录为例说明)

    http://www.android100.org/html/201406/09/22915.html 1.服务器端 服务器端和android没有太大关系,对J2EE比较熟悉的话写起来应该很容易,这里 ...

  3. vs 2010 网站项目和asp.net 应用程序引用webservice

    项目需要做对接,对方提供的是一个webservice接口,自己建了个网站项目,然后添加web 引用,一切正常. 当实际编码的时候,发现一些类.方法找不到. 百思不得其解,只得对照对方提供的demo 看 ...

  4. Square(hdu 1511)

    题目描述: Problem Description Given a set of sticks of various lengths, is it possible to join them end- ...

  5. 导出Excel并下载,但无法定制样式的方法!

    拿来的,望原创见谅! public void EXCELDown(DataTable dt, string strFileName) { Response.ContentEncoding = Syst ...

  6. WebRTC–getUserMedia & Canvas

    下面是一个使用getUserMedia接口和Canvas的drawImage方法实现的截图功能(截取视频中的一帧). 基本思路是这样子的: getUserMedia获取一个MediaStream, s ...

  7. Hadoop_Lucene

    http://codelife.me/blog/2012/11/03/jackson-polymorphic-deserialization/ http://itindex.net/blog/2012 ...

  8. EAN-13 条码(又称GTIN-13 条码)

    EAN全名为European Article Number(欧洲商品条码),在1977年时由欧洲几个主要工业国家共同发展出来的,后来变成国际商品条码系统.台湾在1985年加入EAN会员,现在我们买东西 ...

  9. KbmMW资源汇总(更新中…)

    KbmMW框架是收费的,不在此提供下载,如需购买,请自行联系作者Kim Madsen. 网址资源: 官网主页:http://www.components4programmers.com/product ...

  10. struts文件上传和下载

    文件上传 jsp中 <a href="/file/new.action">文件上传案例</a> fileaction中 @Override public S ...