发个题目链接吧

http://www.cqoi.net:2012/JudgeOnline/problem.php?id=1356

【题解】

在高一妹纸的推荐下看的这道题,发现NOI竟然有水题啊啊,果断水过~~~ 因为zyy语言组织能力不强,应妹纸要求,写个题解,大神请绕道。

下面进入正题。

首先是维护信息。我们不能直接确定A、B、C,但我们可以找他们之间的关系。x吃y,那么就fa[y]=x; 维护一个三角环,对于三角环的每一个角表示同类(并查集)。

然后就是判断假话。2、3两个条件都是O(1)判断的,吴老师肯定会说:wtt都会做。。。orz  所以这里不赘述。考虑第1个判断,下面分情况讨论。

if(x、y是同类)

{

  找到x所在环上的元素a[0],a[1],a[2],y所在环上的元素b[0],b[1],b[2]。

  if(x、y在同一个环上)

  {  

    if(x==y)  同类

    else  假话

  }

  else  合并

}

else

{

  找到x所在环上的元素a[0],a[1],a[2],y所在环上的元素b[0],b[1],b[2]。

  if(x、y在同一个环上)

  {

    if(fa[b[0]]==a[0]) 真话

    else  假话

  }

  else 合并

}

zyy好像还是木有说清楚的说。。。 所以还是上代码吧。。。。

View Code

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 #define MAXN 50020
 5 int p[MAXN*3],fa[MAXN*3];
 6 int a[4],b[4];
 7 int n,m;
 8 int ans;
 9 bool flag;
10 inline void Get_int(int &Ret)
11 {
12     char ch;
13     bool flag=false;
14     for(;ch=getchar(),ch<'0'||ch>'9';)
15         if(ch=='-')
16             flag=true;
17     for(Ret=ch-'0';ch=getchar(),ch>='0'&&ch<='9';Ret=Ret*10+ch-'0');
18     flag&&(Ret=-Ret);
19 }
20 void Pre()
21 {
22     Get_int(n);
23     int i;
24     for(i=1;i<=n;i++)
25     {
26         fa[i]=i+n,fa[i+n]=i+n*2,fa[i+n*2]=i;
27         p[i]=i,p[i+n]=i+n,p[i+n*2]=i+n*2;
28     }
29 }
30 int Find(int x)
31 {
32     if(x!=p[x])
33         p[x]=Find(p[x]);
34     return p[x];
35 }
36 void Work()
37 {
38     Get_int(m);
39     int d,x,y;
40     int i,j,k;
41     for(i=1;i<=m;i++)
42     {
43         Get_int(d),Get_int(x),Get_int(y);
44         if(x>n||y>n)
45         {
46             ans++;
47             continue;
48         }
49         a[0]=Find(x),a[1]=fa[a[0]],a[2]=fa[a[1]];
50         b[0]=Find(y),b[1]=fa[b[0]],b[2]=fa[b[1]];
51         flag=false;
52         for(j=0;j<=2;j++)
53             if(a[0]==b[j])
54             {
55                 k=j;
56                 flag=true;
57                 break;
58             }
59         if(d==1)//the same
60         {
61             if(flag)//in a triangle
62             {
63                 if(a[0]!=b[0])
64                     ans++;
65             }
66             else
67             {
68                 for(j=0;j<=2;j++)
69                     p[b[j]]=a[j];
70             }
71         }
72         else//x<-->y
73         {
74             if(x==y)
75             {
76                 ans++;
77                 continue;
78             }
79             if(flag)
80             {
81                 if(fa[b[0]]!=a[0])
82                     ans++;
83             }
84             else
85             {
86                 for(j=0;j<=2;j++)
87                     p[b[j]]=a[(j+2)%3];
88             }
89         }
90     }
91     printf("%d\n",ans);
92 }
93 int main()
94 {
95     Pre();
96     Work();
97     return 0;
98 } 

至此,此题完美解决。

转载于:https://www.cnblogs.com/CQBZOIer-zyy/archive/2013/03/18/2965366.html

[题解]NOI 2001 食物链相关推荐

  1. NOI[2001]食物链

    今天写了道并查集的题,看来并查集的题刷少了,,,,,用法好神奇啊!!!开三倍并查集 用i表示自己,i+n存天敌,i+2*n存可以克制de,再逻辑判断一下即可. 所以,要意识到并查集的分类处理可以开不同 ...

  2. [ NOI 2001 ] 食物链

    \(\\\) Description 有三类动物 \(A,B,C\),满足\(A\) 吃 \(B\),\(B\)吃 \(C\),\(C\) 吃 \(A\). 现有 \(N\) 个动物,以 \(1 - ...

  3. AC日记——食物链 codevs 1047

    1074 食物链 2001年NOI全国竞赛  时间限制: 3 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond 题解 题目描述 Description 动物王国中有三类动物 A ...

  4. 【codevs1074】食物链

    食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 动物王国中有三类动物 A, ...

  5. wikioi-天梯-提高一等-并查集-1074:食物链

    题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并 ...

  6. POJ 1703 Find them, Catch them(并查集高级应用)

    POJ 1703 Find them, Catch them(并查集高级应用) 手动博客搬家:本文发表于20170805 21:25:49, 原地址https://blog.csdn.net/sunc ...

  7. NOI 题目 试题 目录 信奥 历年

    NOI  题目  试题 目录 信奥 历年 NOI  2018 题目  试题 目录 信奥 历年 第一试   2018年7月18日   08:00-13:00 1.归程  return 2.冒泡排序    ...

  8. NOI Online 2020

    NOI Online #1入门组详细题解 NOI Online #1入门组详细题解__ducati的博客-CSDN博客 [NOI2019]斗主地[期望][组合数学][下降幂][插值] [NOI2019 ...

  9. NOI Online 2022

    [题解]NOI Online 2022 数学游戏题解 [题解]NOI Online 2022 数学游戏题解_inferior_hjx的博客-CSDN博客 NOI Online 2022入门组 数学游戏 ...

最新文章

  1. 基于图像的三维模型重建——相机模型与对极几何
  2. HTTP响应报文与工作原理详解
  3. Android实现ListView(1)
  4. firefox 插件 取消认证签名
  5. 启动子级时出错_WHO I级脑膜瘤手术或放射外科治疗后的恶性转变
  6. PaddlePaddle迁移学习做图像分类,数十种高精度模型任意切换
  7. Guava学习笔记(零):Google Guava 类库简介
  8. 全国python工程师有多少_2019年Python工程师的平均薪资是多少?
  9. Comet:基于 HTTP 长连接的“服务器推”技术
  10. html文字排版步骤,CSS text-align内容位置排版教程
  11. 尘梦回还服务器在维护中是什么意思,20190925维护公告解读
  12. CS,四,组网及因特网
  13. 成为一名Java后端工程师需要掌握的技能
  14. 大数据可视化分析以及预测性分析方法
  15. java web 润乾报表教程_润乾报表 dashboard 分析
  16. 固态硬盘损坏数据如何挽救_大数据挽救生命
  17. 伴随着Web标准发展
  18. 做外贸,用自己公司申请外汇账户收款好,还是用离岸公司收款好一些?
  19. BusyBox 的配置
  20. 彻底解决WPS Office Expansion tool弹出问题!

热门文章

  1. Chrome 最小字体12px
  2. ShardingSphere源码解析 初步准备
  3. 2019新悦动打火困难解决了吗_悦动大面积存在启动困难北京现代检查不出原因就换零件...
  4. html5 content type,Content-Type一览
  5. android 短信优先级,Android-消息机制
  6. php xml 接口调用,php的SimpleXML方法读写XML接口文件实例解析
  7. RabbitMQ的web界面解析
  8. 因发生下列错误 无法创建映射网络驱动器_怎么来修复“Windows无法安装所需文件的错误原因”?...
  9. 计算机大赛开场白,比赛主持开场白
  10. linux下vi编辑器的命令大全,linux下VI编辑器命令大全(超级完整版)