AcWing 240. 食物链
带权并查集,d[x]维护x到父节点的距离
#include<bits/stdc++.h> using namespace std; const int N = 1e5+10; int fa[N],d[N]; int find(int x){ if(x!=fa[x]){ int t=find(fa[x]); d[x]+=d[fa[x]]; fa[x]=t; } return fa[x]; } int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) fa[i]=i; int res=0; while(m--){ int a,x,y; cin>>a>>x>>y; if(x>n || y>n) res++; else{ int u=find(x),v=find(y); if(a==1){ if(u==v && (d[x]-d[y])%3) res++; else if(u!=v){ fa[u]=v; d[u]=d[y]-d[x]; } } else{ if(u==v && (d[x]-d[y]-1)%3) res++; else if(u!=v){ fa[u]=v; d[u]=d[y]-d[x]+1; } } } } cout<<res; return 0; }
本文作者:xhy666
本文链接:https://www.cnblogs.com/xhy666/p/16282281.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!