hdu 6109 数据分割(并查集+set合并)
来源:互联网 发布:免费赚qq币软件 编辑:程序博客网 时间:2024/06/05 11:49
思路:
如果是相等,则看作一个集合,如果不等,则将两个集合连边。
在判断的时候,如果相等的集合中操作是0,就不对;
如果不等的集合操作是1,就不对
#include <algorithm>#include <cstring>#include <set>using namespace std;const int maxn=100005;set<int> g[maxn];int n,m;int a[maxn],b[maxn],c[maxn],fa[maxn];int anst,ans[maxn];int find(int x){ if(fa[x]!=x) fa[x]=find(fa[x]); return fa[x];}void init(){ for(int i=1;i<maxn;i++) g[i].clear(),fa[i]=i;} int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]); init(); set<int>::iterator it; for(int i=1;i<=n;i++) { int u=find(a[i]); int v=find(b[i]); if(c[i]) { if(u==v) continue; else if(g[u].find(v)!=g[u].end()) { init(); ans[++anst]=i; } else { for(it=g[v].begin();it!=g[v].end();++it) { g[u].insert(*it); g[*it].erase(v); g[*it].insert(u); } g[v].clear(); fa[v]=u; } } else { if(u!=v) { g[u].insert(v); g[v].insert(u); } else { ans[++anst]=i; init(); } } } printf("%d\n",anst); for(int i=1;i<=anst;i++) printf("%d\n",ans[i]-ans[i-1]); return 0;}
阅读全文
0 0
- hdu 6109 数据分割(并查集+set合并)
- hdu 6109 数据分割(并查集+set合并)
- HDU 6109 百度之星2017 1002 数据分割(并查集+set)
- HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛
- HDU 6109 数据分割(并查集+set+在线倍增法)
- hdu6109 数据分割【并查集+set】
- hdu 6109 数据分割(并查集,倍增)
- HDU 6109 数据分割(并查集+缩点)
- hdu6109数据分割(并查集+set)
- hdu 6109 数据分割(并查集合并)
- hdu 6109(并查集+set)
- 2017百度之星初赛:A-1002. 数据分割(并查集+set)
- 【百度之星初赛A】1002 数据分割(并查集+Set)
- HDU6109 数据分割 【并查集+启发式】
- HDU 5923 Prediction 并查集 合并
- hdu 1558 Segment set (并查集)
- HDU 1558 Segment set 并查集
- 并查集 HDU 1558 Segment set
- java多线程基础知识
- typedef
- 数据结构-平衡二叉树之一AVL树详解
- Zookeeper详解
- lnmp nginx开启目录浏览,解决中文乱码问题。
- hdu 6109 数据分割(并查集+set合并)
- hdu6112.今夕何夕
- 【字符串·AC自动机】hdu2222 Keywords Search
- 对dao层封装后可以实现根据某一条属性查找到相应的javabean对象
- jvm(3)类加载器
- Unity 回合制战斗系统(中级篇)
- JVM虚拟机个人总结(三)
- 图像处理的相关数学知识
- mysql(5.6)分区(二)与存储引擎相关的分区限制