jzoj1373-食物链【并查集】

题目

有3种动物,有n个动物,m种说法。
1) 当前的话与前面的某些真的话冲突,就是假话;
2) 当前的话中X或Y比N大,就是假话;
3) 当前的话表示X吃X,就是假话。
求假话数


Input

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

Output

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

Sample Input

输入文件
100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5

Sample Output

3


解题思路

100 7
1 101 1 假话 (大于100)
2 1 2 真话
2 2 3 真话
2 3 3 假话 (自己吃自己)
1 1 3 假话 (因为1吃2,2吃3,所以3吃1,所以1和3不可能是同类)
2 3 1 真话
1 5 5 真话
用father[1~n]来表示同类,father[n+1~n*2]来表示吃,father[n*2+1~n*3]来表示被吃。


代码

#include<cstdio>
using namespace std;
int x,y,father[150001],n,m,p,k,w,s,q,num;
int find(int x)//并查集
{if (x!=father[x]) return father[x]=find(father[x]);else return x;
}
void d(int x,int y)//链接
{int fa=find(x),fb=find(y);if (fa<fb) father[fb]=fa;else father[fa]=fb;
}
int main()
{scanf("%d%d",&n,&k);    for (int i=1;i<=n*3;i++) father[i]=i;   for (int i=1;i<=k;i++){scanf("%d%d%d",&w,&x,&y);if (x>n || y>n || w==2 && (find(x)==find(y) || find(x)==find(y+n*2)) || w==1 && (find(x)==find(y+n) || find(x)==find(y+n*2))) s++;//find(x)==find(y)表示同类,find(x)==find(y+n*2)来表示被吃,find(x)==find(y+n)来表示吃else {if (w==1) {d(x,y);d(x+n,y+n);d(x+n*2,y+n*2);}//链接else {d(x,y+n);d(x+n,y+n*2);d(x+n*2,y);}//链接}}printf("%d",s);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ajax实现二级联动

ajax02.jsp <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><title>二级联动</title><base href"<%request.getContextPath()"/"%>"><script type"…

如何快速搭建一个免费的,无限流量的Blog

转载自 如何快速搭建一个免费的&#xff0c;无限流量的Blog 喜欢写Blog的人&#xff0c;会经历三个阶段。 第一阶段&#xff0c;刚接触Blog&#xff0c;觉得很新鲜&#xff0c;试着选择一个免费空间来写。 第二阶段&#xff0c;发现免费空间限制太多&#xff0c;就自己购买域…

切记!构造函数里面别一定不要初始化其他类,踩过坑的都知道

点击上方蓝色关注我们&#xff01;先来看看什么是构造函数&#xff08;方法&#xff09;&#xff1a;是一种特殊的方法&#xff0c;特殊之处就在于它没有返回类型&#xff0c;void也不可以有。且方法名与类名完全相同。主要是用来创建对象时初始化对象&#xff0c;也就是为对象…

线程安全问题解决

方式一(同步代码块) synchronized(同步监视器){ //需要被同步的代码 } 说明&#xff1a;1.操作共享数据的代码&#xff0c;即为需要被同步的代码。 -->不能包含代码多了&#xff0c;也不能包含代码少了。 2.共享数据&#xff1a;多个线程共同操作的变量。比如&#xff1a;…

Chrome DevTools 调研笔记

1 说明 此篇文章针对Chrome DevTools常用功能进行调研分析。描述了每个功能点能实现的功能、应用场景和详细操作。 2 Elements 2.1 功能 检查和实时更新页面的HTML与CSS 在 Elements 面板中检查和实时编辑 DOM 树中的任何元素。在 Styles 窗格中查看和更改应用到任何选…

Ajax响应处理数据的三种格式(主要使用gson包)

Ajax响应处理数据的三种格式 A、普通文本(重点)后台&#xff1a;sevletresp.getWriter().print("Ajax响应成功");前台&#xff1a;jspvar text xhr.responseText;B、JSON格式(重点)1、更改toString方法&#xff08;了解&#xff09;Overridepublic String toString…

网站开发人员应该知道的62件事

转载自 网站开发人员应该知道的62件事 有人在Stack Overflow上发问&#xff0c;动手开发网站之前&#xff0c;需要知道哪些事情&#xff1f; 不出意料地&#xff0c;他得到了一大堆回答。 通常情况下&#xff0c;你需要把所有人的发言从头到尾读一遍。但是&#xff0c;Stac…

jzoj1350-游戏(某C组)【SPFA,图,最短路】

前言 每天一道C组题get√ 题目 有一颗树&#xff0c;只有一个树根&#xff0c;Alice有M1块石头&#xff0c;Bob有M2块石头&#xff0c;Alice先移每个人轮流移动石头&#xff0c;谁先把自己的石头全部移动到树根处就失败了&#xff0c;输出游戏胜者。 Input 输入包含多组测试…

java中你知道的这四种代码块吗?

点击上方蓝字关注我们大家好&#xff0c;我是雄雄&#xff0c;今天给大家分享的是&#xff1a;java中的四种代码块什么叫代码块&#xff1f;代码块就是将多行代码封装到一个“{}”中&#xff0c;形成一个独立的代码区&#xff0c;这就构成了代码块&#xff0c;一般常见的代码块…

单例模式懒汉式(线程安全写法)

package com.atguigu.java1;/*** 使用同步机制将单例模式中的懒汉式改写为线程安全的** author shkstart* create 2019-02-15 下午 2:50*/ public class BankTest {}class Bank{private Bank(){}private static Bank instance null;public static Bank getInstance(){//方式一…

DDD理论学习系列(5)-- 统一建模语言

1.引言 上一节讲解了领域模型&#xff0c;领域模型主要是将业务中涉及到的概念以面向对象的思想进行抽象&#xff0c;抽象出实体对象&#xff0c;确定实体所对应的方法和属性&#xff0c;以及实体之间的关系。然后将这些实体和实体之间的关系以某种形式&#xff08;比如UML、图…

java中你知道这四种代码块吗?

大家好&#xff0c;我是雄雄&#xff0c;今天给大家分享的是&#xff1a;java中构造代码块的用法。 什么叫代码块&#xff1f;代码块将多行代码封装到一个{}中&#xff0c;形成一个独立的代码区&#xff0c;这就够成了代码块&#xff0c;一般常见的代码块是这样的&#xff1a; …

jzoj2152-终极数【堆】

题目&#xff08;复杂&#xff09; 给定一个长度为n的序列a&#xff0c;试求出对于序列a的每一个前缀的终极数x&#xff0c;使得 最小&#xff0c;试求出终极数t&#xff08;如若有多个终极数t&#xff0c;只需输出最小的那个&#xff09; 正解 其实就是求中位数… 输入 …

谈谈准确率(P值)、召回率(R值)及F值

转载自 谈谈准确率&#xff08;P值&#xff09;、召回率&#xff08;R值&#xff09;及F值 谈谈准确率&#xff08;P值&#xff09;、召回率&#xff08;R值&#xff09;及F值 一直总是听说过这几个词&#xff0c;但是很容易记混&#xff0c;在这里记录一下。希望对大家理解…

线程创建两种方式

方式一(继承于Thread类) 创建一个继承于Thread类的子类重写Thread类的run() --> 将此线程执行的操作声明在run()中创建Thread类的子类的对象通过此对象调用start() package com.wdl.java;//1. 创建一个继承于Thread类的子类 class MyThread extends Thread {//2. 重写Thre…

在ASP.NET CORE 2.0使用SignalR技术

一、前言 上次讲SignalR还是在《在ASP.NET Core下使用SignalR技术》文章中提到&#xff0c;ASP.NET Core 1.x.x 版本发布中并没有包含SignalR技术和开发计划中。时间过得很快&#xff0c;MS已经发布了.NET Core 2.0 Preview 2 预览版&#xff0c;距离正式版已经不远了&#xf…

【jzoj】2018/2/2 NOIP普及组——D组模拟赛

前言 今天五道题&#xff0c;难度做起来感觉很难&#xff0c;其实就是纸老虎233。 正题 题目1&#xff1a;公牛数学&#xff08;jzoj1896&#xff09; 就是高精乘 输入 第1..2行&#xff1a;每行包含一个十进制数 输出 第1行&#xff1a;输出两个数乘积 样例输入 1111…

java中常见的几种内部类,你会几个?(未完)

点击上方蓝色关注我们&#xff01;大家好&#xff0c;我是雄雄&#xff0c;今天给大家介绍的是java中的几种内部类。java中常见的几个内部类&#xff0c;你会几个&#xff1f;我会四个&#xff01;在看每个新知识点时&#xff0c;我们不禁有这样或者那样的疑问&#xff0c;比如…

通俗理解信息熵

转载自 通俗理解信息熵 通俗理解信息熵 前段时间德川和我讲解了决策树的相关知识&#xff0c;里面德川说了一下熵&#xff0c;今天整理了一下&#xff0c;记录下来希望对大家理解有帮助~ 1、信息熵的公式 先抛出信息熵公式如下&#xff1a; 其中代表随机事件X为的概率&…

程序、进程、线程

程序(program) 是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码&#xff0c;静态对象。 进程(process) 是程序的一次执行过程&#xff0c;或是正在运行的一个程序。是一个动态的过程&#xff1a;有它自身的产生、存在和消亡的过程。——生命周期 如…