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;
}

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

相关推荐
tpoog19 分钟前
[MySQL] 表的增删查改(查询是重点)
linux·数据库·mysql·算法·贪心算法
一只拉古35 分钟前
掌握贪心(Greedy)算法:从 LeetCode 难题到系统架构
算法·leetcode·面试
xrkhy1 小时前
提高课:数据结构之树状数组
数据结构·c++·算法
阳洞洞2 小时前
leetcode 2787. Ways to Express an Integer as Sum of Powers
算法·leetcode·动态规划·01背包问题
阳洞洞2 小时前
leetcode 279. Perfect Squares
算法·leetcode·动态规划·完全背包问题
星语心愿.3 小时前
Y1——ST表
c++·算法
新生农民3 小时前
最小覆盖子串
java·数据结构·算法
烁3473 小时前
每日一题(小白)暴力娱乐篇22
java·开发语言·算法·娱乐
rigidwill6663 小时前
华为机试—最大最小路
数据结构·c++·算法·华为od·华为·职场和发展·并查集
鑫—萍4 小时前
数据结构与算法——链表OJ题详解(2)
c语言·开发语言·数据结构·学习·算法·链表