acwing-240. 食物链(并查集+边权值)[通俗易懂]

acwing-240. 食物链(并查集+边权值)[通俗易懂]动物王国中有三类动物 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 句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

动物王国中有三类动物 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 句话有的是真的,有的是假的。

当一句话满足下列三条之一时,这句话就是假话,否则就是真话。

当前的话与前面的某些真的话冲突,就是假话;
当前的话中 X 或 Y 比 N 大,就是假话;
当前的话表示 X 吃 X,就是假话。
你的任务是根据给定的 N 和 K 句话,输出假话的总数。

输入格式
第一行是两个整数 N 和 K,以一个空格分隔。

以下 K 行每行是三个正整数 D,X,Y,两数之间用一个空格隔开,其中 D 表示说法的种类。

若 D=1,则表示 X 和 Y 是同类。

若 D=2,则表示 X 吃 Y。

输出格式
只有一个整数,表示假话的数目。

数据范围
1≤N≤50000,
0≤K≤100000

输入样例:
100 7
1 101 1 
2 1 2
2 2 3 
2 3 3 
1 1 3 
2 3 1 
1 5 5
输出样例:
3
#include<bits/stdc++.h>
using namespace std;
const int N = 5e4 + 10;
int f[N],d[N];
int Find(int x){ 
   
    if(x != f[x]){ 
   
        
        int t = Find(f[x]);
        d[x] = (d[x] + d[f[x]]);
    
        f[x] = t;
    }
    return f[x];
}
int main(){ 
   
    int n,k;
    cin>>n>>k;
    for(int i = 0;i <= n;i ++)f[i] = i;
    memset(d,0,sizeof d);
    int res = 0;
    int t,x,y;
    for(int i = 0;i < k;i ++){ 
   
        cin>>t>>x>>y;
        if(x > n || y > n)res ++;
        else{ 
   
            int a = Find(x),b = Find(y);
            if(t == 1){ 
   
                if(a != b){ 
   
                    f[a] = b;
                    d[a] = (d[y] - d[x]);
                }else{ 
   
                    if(abs(d[y] - d[x]) % 3)res ++;
                }
            }
            else { 
   
                if(a != b){ 
   
                    f[a] = b;
                    d[a] = (1 + d[y] - d[x]);
                }else { 
   
                    if(abs(d[x] - d[y] - 1) % 3)res ++;
                }
            }
        }
    }
    cout<<res<<endl;
    
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169103.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java拦截器handler_java拦截器HandlerInterceptor的preHandle、postHandle与afterCompletion三个方法…

    java拦截器handler_java拦截器HandlerInterceptor的preHandle、postHandle与afterCompletion三个方法…preHandle调用时间:Controller方法处理之前执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行若返回false,则中断执行,注意:不会进入afterCompletionpostHandle调用前提:preHandle返回true调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这…

    2022年5月26日
    132
  • java基本数据类型 think in java_Think in Java(一):Java基础[通俗易懂]

    java基本数据类型 think in java_Think in Java(一):Java基础[通俗易懂]一.OOP的特点(1)万物皆为对象;(2)程序是对象的集合,他们通过发送信息来告诉彼此所要做的;(3)每一个对象都有自己的由其它对象所构成的存储;(4)每一个对象都拥有它的类型;(5)某一特定类型的对象都能够接收相同的消息;二.Java比C++简单?(1)Java有垃圾回收器,不用手动销毁对象;(2)Java使用单根继承;(3)Java仅仅能以一种方式创建对象(在堆上创建);…

    2022年7月8日
    17
  • SciPy 安装_scipy中文手册

    SciPy 安装_scipy中文手册章节SciPy介绍SciPy安装SciPy基础功能SciPy特殊函数SciPyk均值聚类SciPy常量SciPyfftpack(傅里叶变换)SciPy积分SciPy插值SciPy输入输出SciPy线性代数SciPy图像处理SciPy优化SciPy信号处理SciPy统计SciPy安装确保已经安装pip。最佳实践是,一起安装NumP…

    2025年7月12日
    3
  • android之常用控件大集合

    android之常用控件大集合android中的控件可谓应有尽有,从简单的Button到复杂的WebView,无所不能,无所不有。在开发的早期阶段,这些控件应该完全能够满足开发者的要求.随着知识的不断深入,开发者完全可以根据自己的

    2022年7月2日
    25
  • 普罗米修斯监控系统搭建(MAC环境基于Docker)「建议收藏」

    普罗米修斯监控系统搭建(MAC环境基于Docker)「建议收藏」采用Docker环境搭建方式可以快速搭建起测试学习环境第一步:下载docker镜像dockerpullprom/node-exporterdockerpullprom/prometheusdockerpullgrafana/grafana第二步:启动exporter(理解为内置好的监控埋点)dockerrun-d-p9100:9100\-v”/proc:/host/proc:ro”\-v”/sys:/host/sys:ro”\-v”/:/roo

    2022年7月19日
    53
  • java连接mysql数据库的步骤(访问数据库的步骤)

    Java连接MySQL数据库步骤声明,只推荐你看代码学会我的步骤,逻辑,还有用的所有方法第一,​ 安装mysql数据库配置(https://www.jianshu.com/p/ea4accd7afb4),安装还有配置教程,按照步骤来肯定没错,里面是win10的mysql解压版安装教程,设置账号密码是一定要注意:账号一般为root,密码一般为123456,如果你要更改的话一定要记住,因为…

    2022年4月15日
    150

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号