题解 | #食物链#

食物链

https://ac.nowcoder.com/acm/problem/16884

主要考察加权并查集

更加深入的考察并查集知识,在并查集中加入关系域,关系域会随着加入数据的内容进行实时更新。 c++代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N=1e8+7;
int n,k;
int d,x,y;
int h[N];
long long sum=0;
struct m{
    int parent;
    int relation;
}p[N];
int find_root(int root){
    int temp;
	if(root == p[root].parent)
		return root;
	temp = p[root].parent; //路径压缩
	p[root].parent = find_root(temp);
	p[root].relation = (p[root].relation + p[temp].relation) % 3; //关系域更新
	return p[root].parent; //根结点
}
int main ()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        p[i].parent=i;
        p[i].relation=0;
    }
    while(k--){
        cin>>d>>x>>y;
        if(x>n||y>n){
            sum++;continue;
        }
        if(d==2&&x==y){
            sum++;continue;
        }
        int root1 = find_root(x);
		int root2 = find_root(y);
        if(find_root(x)!=find_root(y)){
            p[root2].parent=root1;
            p[root2].relation=(3+(d-1)+p[x].relation-p[y].relation)%3;
        }
        else{
            if(d==1&&p[x].relation!=p[y].relation){
                sum++;continue;
            }
            if(d==2&&((3-p[x].relation+p[y].relation)%3!=d-1)){
                sum++;continue;
            }
        }
    }
    cout<<sum<<endl;
    return 0;
}
全部评论
666
1 回复 分享
发布于 2023-08-12 14:17 安徽

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务