hdu 6109(并查集+set)
来源:互联网 发布:ubuntu 邮件 编辑:程序博客网 时间:2024/06/05 02:26
hdu 6109
思路:尽量让多的条件满足,当有一个条件和前面的冲突时,就是分隔符的时候,用并查集维护相同的数,set维护不同的数。当两个数在同一个并查集中时,代表两个数相同,不在同一个并查集是说明两个数可能相同也可能不同。当a在b的set中时代表b和a不相同。所以当我们每次判断两个数是否相同时先找并查集,并且要顺带更新set因为a==b,
#include<set>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define LL long longusing namespace std;const int maxn=1e6+10;int fa[maxn],dep[maxn];//dep记录的是并查集的高度,用于将低树并到高树上set<int> s[maxn/10];//s[i]记录和i不相等的集合void init(int n)//初始化{ for(int i=1;i<=n;i++) { fa[i]=i; dep[i]=0; s[i].clear(); }}void push_up(int a,int b){ for(set<int>::iterator it=s[a].begin();it!=s[a].end();it++) s[b].insert(*it);}int finds(int x){ if(x==fa[x]) return x; push_up(x,fa[x]);//将儿子不相等的并到父亲的集合里 return fa[x]=finds(fa[x]);}void merger(int a,int b)//合并a,b{ a=finds(a),b=finds(b); if(dep[a]<dep[b]) fa[a]=b; else { fa[b]=a; if(dep[a]==dep[b]) dep[a]++; }}int ans[maxn];int main(){ int n; while(~scanf("%d",&n)) { init(n); int cont=0,tot=0; for(int i=0;i<n;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); a=finds(a),b=finds(b); tot++; if(c) { if(a!=b)//当fa[a]和fa[b]不相同时a可能等于b也可能不等于 { if(s[a].count(b)||s[b].count(a))//fa[a]中有fa[b]或者fa[b]中有fa[a]则说明a和b不相等 { ans[cont++]=tot; tot=0; init(n); } else//a和b相同 merger(a,b); } } else { if(a==b)//fa[a]和fa[b]在同一个并查集里说明a==b { ans[cont++]=tot; tot=0; init(n); } else { s[a].insert(b); s[b].insert(a); } } } printf("%d\n",cont); for(int i=0;i<cont;i++) printf("%d\n",ans[i]); }}
阅读全文
0 0
- hdu 6109(并查集+set)
- hdu 6109 数据分割(并查集+set合并)
- hdu 6109 数据分割(并查集+set合并)
- hdu 1558 Segment set (并查集)
- HDU 1558 Segment set 并查集
- 并查集 HDU 1558 Segment set
- HDU 1558 Segment set, 计算几何+并查集
- HDU 1558 Segment set (并查集+线段相交)
- hdu 1558 Segment set(并查集+线段相交)
- hdu 1558 Segment set(并查集)
- hdu 1558 Segment set 线段相交+并查集
- HDU-4879-ZCC loves march(map+set+并查集)
- HDU 4879 ZCC loves march(并查集+set)
- HDU 1558 Segment set(线段相交+并查集)
- HDU--1558--Segment set--并查集***经典***
- HDU 1558 Segment set(判断线段相交+并查集)
- HDU 1158 Segment set(线段相交 并查集)
- hdu 1558 Segment set(线段相交+并查集)
- Java基础学习总结(111)——Java虚拟机JVM总结大全
- cxf web service 的maven配置
- C++中string的用法 string字符串的使用方法
- oracle的alter添加,修改,删除操作
- 算法题 143:回文序列(网易2017秋招编程题)
- hdu 6109(并查集+set)
- slam数据集整合
- Oracle远程登录命令
- opencv学习中的参考知识
- Android Studio 2.3+Emulator启动黑屏解决方法
- View (四)视图状态及重绘流程分析
- jmeter
- hdu-1358 kmp,next数组的应用
- Spring MVC 4.2 增加 CORS 支持