2.数据结构:5.食物链

cpp 复制代码
#include<algorithm>
#include<iostream>
#include<cstring> 

using namespace std;

const int N=50010;

int n,m;
int p[N],d[N];

int find(int x){
    if(x!=p[x]){
        int t=find(p[x]);
        d[x]+=d[p[x]];
        p[x]=t;
    }
    
    return p[x];
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        p[i]=i;
    }
    
    int ans=0;
    while(m--){
        int t,x,y;
        cin>>t>>x>>y;
        
        if(x>n||y>n){
            ans++;
        }else{
            int px=find(x),py=find(y);
            if(t==1){
                if(px==py&&(d[x]-d[y])%3){
                    ans++;
                }else if(px!=py){
                    p[px]=py;
                    d[px]=d[y]-d[x];
                }
            }else{
                if(px==py&&(d[x]-d[y]-1)%3){
                    ans++;
                }else if(px!=py){
                    p[px]=py;
                    d[px]=d[y]-d[x]+1;
                }
            }
        }
    }
    
    printf("%d\n",ans);
    
    return 0;
}

总共三种动物,维护和根节点之间的距离。对三取模之后把同一个集合里面的动物分为了三类。

相关推荐
赛姐在努力.23 分钟前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
我能坚持多久1 小时前
【初阶数据结构01】——顺序表专题
数据结构
野犬寒鸦2 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
霖霖总总2 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法
rainbow68892 小时前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法
wangjialelele2 小时前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
xuxie992 小时前
day 21 双向链表以及循环链表
数据结构·链表
驱动探索者3 小时前
linux mailbox 学习
linux·学习·算法
ringking1233 小时前
autoware-1:安装环境cuda/cudnn/tensorRT库函数的判断
人工智能·算法·机器学习
大闲在人3 小时前
8. 供应链与制造过程术语:产能
算法·制造·供应链管理·智能制造·工业工程