题目链接:https://cn.vjudge.net/problem/HDU-6109

题意

给出多组等式不等式

对于每一个式子,首先判断是否不可能

如果不可能,记录本组正确式子的个数,然后进入下一组式子

思路

一开始还以为是食物链,等到写出来WA了才发现不等号不能传递(注意并查集的传递性了)

然后决定用一个set存下所有不等边,事后发现一个set难以维护和查询

最后实在不行看了题解,发现只要用一个类似线段树的PushUp来维护根节点的不等情况就好,真是一个好思路啊学习了

代码

#include <set>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=int(1e5);
struct Node{
int pre, rank;
Node(int pre=0, int rank=0):
pre(pre), rank(rank) {}
}node[maxn+5];
set<int> diff[maxn+5];
int n, m;
int kase=0, cnt=0, ptr=0, num[maxn+5]={0};
int find(int x){
return (node[x].pre==x)?x:(node[x].pre=find(node[x].pre));
} void pushup(int nod, int root){
for (set<int>::iterator it=diff[nod].begin(); it!=diff[nod].end(); it++)
diff[root].insert(*it);
} void join(int a, int b){
a=find(a); b=find(b);
if (a==b) return;
if (node[a].rank==node[b].rank) node[a].rank++;
if (node[a].rank>node[b].rank) {node[b].pre=a; pushup(b, a);}
else {node[a].pre=b; pushup(a, b);}
} inline void split(void){
for (int i=0; i<=maxn; i++){
diff[i].clear();
node[i]=Node(i, 0);
}
num[ptr++]=cnt;
kase++; cnt=0;
} int main(void){
int l, a, b, equal;
scanf("%d", &l); for (int i=0; i<=maxn; i++){
diff[i].clear();
node[i]=Node(i, 0);
}
while (l--){
cnt++;
scanf("%d%d%d", &a, &b, &equal);
a=find(a); b=find(b);
if (!equal){
if (a==b) {split(); continue;}
diff[a].insert(b); diff[b].insert(a);
}else{
if (diff[a].count(b) || diff[b].count(a)) {split(); continue;}
join(a, b);
}
}printf("%d\n", kase);
for (int i=0; i<ptr; i++) printf("%d\n", num[i]); return 0;
}
Time Memory Length Lang Submitted
109ms 8200kB 1499 G++ 2018-03-21 14:54:04

HDU-6109 数据分割 并查集(维护根节点)的更多相关文章

  1. HDU 6109 数据分割 并查集,SET

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 题意:中文题面 解法:每次都贪心地尝试将尽量多的条件放进当前这组,遇到第一个与已有条件冲突时,就 ...

  2. The Suspects(并查集维护根节点信息)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 37090   Accepted: 17980 De ...

  3. HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A))

    数据分割 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. 2017"百度之星"程序设计大赛 - 初赛(A) [ hdu 6108 小C的倍数问题 ] [ hdu 6109 数据分割 ] [ hdu 6110 路径交 ] [ hdu 6112 今夕何夕 ] [ hdu 6113 度度熊的01世界 ]

    这套题体验极差. PROBLEM 1001 - 小C的倍数问题 题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6108 (2017"百度之星 ...

  5. hdu 6109 数据分割

    /** * 题目描述有点坑,勉强能读懂,大致意思,有多组约束条件.原本每组数据之间是有分界符号的 * 现在分界符号没了,让你找出原来每组数据多少个条件,并且告诉,每组的最后一个条件会使得与前面的 * ...

  6. hihoCoder #1291 : Building in Sandbox 逆向处理+并查集维护

    /** 题目:#1291 : Building in Sandbox 链接:https://hihocoder.com/problemset/problem/1291 题意:就是一个三维的空间里,按照 ...

  7. hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)

    hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 ...

  8. HDU 3688 Searchlights(并查集)

    Problem Description There is a piece of grids land of size n×m. Chandler and his team take responsib ...

  9. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

随机推荐

  1. 3.多线程传参,以及tuple数组

    #include <Windows.h> #include <thread> #include <iostream> #include <tuple> ...

  2. POJ 3261 后缀数组+二分

    思路: 论文题- 二分+对后缀分组 这块一开始不用基数排序 会更快的(其实区别不大) //By SiriusRen #include <cstdio> #include <cstri ...

  3. POJ 3268 Dijkstra+priority_queue或SPFA

    思路:正向建边,一遍Dijkstra,反向建边,再一遍Dijkstra.ans加在一起输出最大值. (SPFA也行--) // by SiriusRen #include <queue> ...

  4. 前端模块化 | 解读JS模块化开发中的 require、import 和 export

    本篇分为两个部分 第一部分:总结了ES6出现之前,在当时现有的运行环境中,实现"模块"的方式: 第二部分:总结了ES6出现后,module成为ES6标准,客户端实现模块化的解决方案 ...

  5. 07:清泉-改(prime+堆)

    时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  512000kB 描述 华北电力大学可以抽象为一张有n个点m条边的无向图. 现在所有的边都断了. 修复每条边都有个不同 ...

  6. 3ds Max实例教程-顽皮的小孩

    本教程介绍使用3ds Max制作设计一个顽皮的小孩,这个作品的灵感来源于作者的亲身经历,也是以真实人物为原型做出来这么一个小人. 作者: Claudius Vesting 使用软件:3ds Max,P ...

  7. Dapper基础知识三

    在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. Dapper,当项目在开发的时候,在没有必要使用依赖注入的时候,如何做 ...

  8. n阶方阵,数字从1~n^2,顺时针增大

    运行结果如下图: 解题思路:可以将这个问题分解成x个外围正方形所围成的图形,外围的正方形又可以分为4个步骤,向右依次增大.向下依次增大.向左依次增大.向上依次增大.基本思路就是如此,最关键的就是什么时 ...

  9. 如何让iframe背景色透明框架页文件设置

    如何让iframe背景色透明框架页文件设置:<body style="background-color:transparent" > 或 <body bgColo ...

  10. 洛谷 P2633 Count on a tree 主席树

    在一棵树上,我们要求点 $(u,v)$ 之间路径的第$k$大数. 对于点 $i$  ,建立 $i$  到根节点的一棵前缀主席树. 简单容斥后不难得出结果为$sumv[u]+sumv[v]−sumv[l ...