三角关系并查集
时间:2021-07-12
本文章向大家介绍三角关系并查集,主要包括三角关系并查集使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目luogu P2024 [NOI2001] 食物链
各个并查集中不一定是同一类了,有了权值
ACcode
//https://www.luogu.com.cn/problem/P2024
#include<bits/stdc++.h>
#define N 50010
using namespace std;
typedef long long ll;
void setio(string);
int n,k,f[N],cost[N]; //cost指向父亲的边的属性(0~3)0同类 1吃 2被吃
int ans=0;
int gf(int x){//找祖先并路径压缩
if(f[x]==x)return x;
int tmp=gf(f[x]);
cost[x]=(cost[x]+cost[f[x]])%3;
f[x]=f[f[x]];
return f[x];
}
int main(){
setio("");
cin>>n>>k;
for(int i=1;i<=n;i++){//并查集init
f[i]=i;
cost[i]=0;
}
for(int i=1,op,x,y;i<=k;i++){
cin>>op>>x>>y;
if(x==y && op==2 || x>n || y>n){//必假
ans++;
continue;
}
int xx=gf(x),yy=gf(y);
if(xx==yy){//判断是否为真(双路cost同余)
if((op==1 && cost[x]!=cost[y]) || (op==2 && (1+cost[y]-cost[x]+3)%3!=0))ans++;
}else{//必定为真,直接操作
cost[xx]=(3-cost[x])%3;
cost[yy]=(3-cost[y])%3;
f[xx]=x;
f[yy]=y;
f[x]=f[y]=y;
if(op==1)cost[x]=0;//同类
else cost[x]=1;//吃
cost[y]=0;
}
}
cout<<ans<<endl;
return 0;
}
void setio(string name){
ios_base::sync_with_stdio(0);
cin.tie(0);
if(name!=""){
freopen((name+".in").c_str(),"r",stdin);
freopen((name+".out").c_str(),"w",stdout);
}
}
原文地址:https://www.cnblogs.com/zhangshaojia/p/15004246.html
- 微信产品经理的妥协还是用户的需求?
- CSLA .NET 3.6支持Silverlight 2
- WCF技术剖析之二:再谈IIS与ASP.NET管道
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(61)-如何使用框架来开发
- (保存)C#基础概念二十五问
- flash留言本
- 这或许是2017年最有设计感的“无人车”推文
- 世界首条光伏高速公路:能发电,能充电,能化雪
- WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘
- 简练的视图模型 ViewModel
- 提供智能服务?先迈过数字信任这个坎
- 《天弋夺宝》—01飞船的控制
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出
- 核心代码(未注释)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【译】Flutter架构综述
- 【tcl学习】vivado write_project_tcl
- 你不知道的LinkedList(一):基于jdk1.8的LinkdeList源码分析
- SAP CRM Application Extension Tool(AET)扩展字段的渲染原理
- 使用nodejs将SAP Fiori应用置于本地Launchpad运行
- 使用nodejs运行SAP Fiori应用
- JUnit 注解@Category的工作原理
- JUnit 注解@RunWith的工作原理
- Java|快速掌握java判断语句的用法
- Oh!老伙计,提高自己的并发技能,先从锁优化开始吧
- iOS开发之WidgetKit
- 六、玩转Git三剑客-初识GitHub
- Python|自制二维码生成器
- HBase豆知识
- github 访问ping不通的解决办法