【提高组】并查集
时间:2019-10-22
本文章向大家介绍【提高组】并查集,主要包括【提高组】并查集使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
(时隔多日回归刷题日常...)
P1111 修复公路
按时间sort一遍,每次合并两个节点,显然如果原先不连通那么合并之后联通块数量--。然后如果n==1就输出当前时间return。
#include<bits/stdc++.h> #define For(i,l,r) for(int i=l;i<=r;i++) using namespace std; const int M=2e5+5; struct node{ int x,y,t; }e[M]; int fa[M],n,m; inline int cmp(const node x,const node y){return x.t<y.t;} inline int getfa(int x){return fa[x]==x?x:getfa(fa[x]);} inline int read(){ int f=1,sum=0; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){sum=(sum<<1)+(sum<<3)+(ch^48);ch=getchar();} return f*sum; } int main(){ n=read(),m=read(); For(i,1,m) e[i].x=read(),e[i].y=read(),e[i].t=read(); sort(e+1,e+m+1,cmp); For(i,1,n) fa[i]=i; For(i,1,m){ int fx=getfa(e[i].x),fy=getfa(e[i].y); if(fx!=fy) fa[fx]=fy,n--; if(n==1) {printf("%d\n",e[i].t);return 0;} } printf("-1\n"); return 0; }
P2024 [NOI2001]食物链
巨简单的思路果然一交就挂,20分,但不知道错在哪里。
看了题解,学了带权并查集,一知半解吧,再去看几道题。
f[x]意义不变,re[x]记录关系AKA权值,没搞懂怎么推出来的。
#include<bits/stdc++.h> #define For(i,l,r) for(int i=l;i<=r;i++) using namespace std; const int M=1e5+5; int f[M],re[M]; int n,m,k,x,y,ans; int getfa(int a){ int fa=f[a]; if(a!=fa){ f[a]=getfa(fa); re[a]=(re[a]+re[fa])%3; return f[a]; } else return fa; } int main(){ cin>>n>>m; For(i,1,n) f[i]=i; while(m--){ cin>>k>>x>>y; if(x>n||y>n||(k==2&&x==y)){ans++;continue;} if(k==1){ int fx=getfa(x),fy=getfa(y); if(fx==fy&&re[x]!=re[y]){ans++;continue;} else if(fx!=fy){f[fx]=fy;re[fx]=(re[y]-re[x]+3)%3;} } if(k==2){ int fx=getfa(x),fy=getfa(y); if(fx==fy){ int rela=(re[x]-re[y]+3)%3; if(rela!=1){ans++;continue;} } else f[fx]=fy,re[fx]=(re[y]-re[x]+4)%3; } } cout<<ans<<endl; return 0; }
原文地址:https://www.cnblogs.com/jian-song/p/11720598.html
- [WCF-Discovery]让服务自动发送上/下线通知[原理篇]
- [WCF-Discovery]让服务自动发送上/下线通知[实例篇]
- [WCF权限控制]利用WCF自定义授权模式提供当前Principal[实例篇]
- [WCF权限控制]利用WCF自定义授权模式提供当前Principal[原理篇]
- [自定义服务器控件] 第一步:文本框。
- 检查两个数据库里的表名、字段是否一致的一种方法
- 如何在Python中从零开始实现随机森林
- 基类、接口的应用——表单控件:一次添加、修改一条记录,一次修改多条记录。(上)
- 使命必达: 深入剖析WCF的可靠会话[协议篇](下)
- 分页控件和几个相关控件的源代码
- Python编程中的反模式
- Python机器学习库:Scikit-Learn简介
- 很简单的企业管理器---我写程序的方式,几个自定义控件。
- 使命必达: 深入剖析WCF的可靠会话[原理揭秘篇](上)
- 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 数组属性和方法
- Redis-Java项目应用(Jedis、SpringBoot整合、工具类模板)
- 微软被指剽窃他人开源作品!作者被迫终止该项目
- 秋招系列 | 推荐岗史上最强面经来袭(上)
- 一个Tomcat 如何部署多个项目?附多种解决方案及详细步骤!
- 初识SpringCloud
- .NET程序设计复习总结
- Ribbon讲解与应用
- break, continue 和 return 的用法及区别
- JavaWeb 图书管理系统
- 深度学习-多分类问题
- umi项目中dva effects异常处理
- Eureka应用
- 深度学习-回归问题
- R语言安装ggbiplot
- IDEA 一键部署 Spring Boot 到 Docker,这个骚操作你会了吗?