题目链接: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. sublime配置python运行环境

    1.sublime下载与插件管理 1.1 下载 官网地址:https://www.sublimetext.com/3 1.2 安装Package Control管理插件 使用ctrl + ` (感叹后 ...

  2. ETL工具的功能和kettle如何来提供这些功能

    不多说,直接上干货! 大家会有一个疑惑,本系列博客是Kettle,那怎么扯上ETL呢? Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行. 说白了 ...

  3. excel文件使用html导出

    <table><tr><td>1</td></tr><tr><td>2</td></tr>& ...

  4. 【转】IIS初始化(预加载),解决第一次访问慢,程序池被回收问题

    原地址:http://www.debugrun.com/a/mpyWXwg.html 读在最前面: 1.本文以IIS8,Windows Server 2012R2做为案例 2.IIS8 运行在 Win ...

  5. 51nod 1021 石子归并 (动态规划 简单代码)

    题目: 思路:动态规划,递推式子 dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]);     dp[i][j]表示 ...

  6. HttpWebRequest WebExcepton: The remote server returned an error: (407) Proxy Authentication Required.

    1. Supply the credentials of the Currently Logged on User to the Proxy object similar to this: // Be ...

  7. NYOJ 16 矩形嵌套【DP】

    解题思路:呃,是看的紫书上面的做法,一个矩形和另一个矩形之间的关系就只有两种,(因为它自己是不能嵌套自己的),可嵌套,不可嵌套,是一个二元关系,如果可嵌套的话,则记为1,如果不可嵌套的话则记为0,就可 ...

  8. css文字超出变省略号...

    <style>.text1 {    width:200px;    overflow:hidden;    text-overflow:ellipsis;    -o-text-over ...

  9. ZBrush中常用笔刷综合简介

    单击左托盘的笔刷图标,弹出一个笔刷库,其中有许多常用笔刷,这也是许多初学者所头疼的问题,ZBrush的笔刷非常多,而且功能很强大,好多朋友不知道该选择哪一个笔刷进行雕刻.其实,在ZBrush的学习中我 ...

  10. Django——Model

    一. ORM 在 MVC 或者说 MTV 设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢? 我们可以在 Python 代码中嵌入 SQL 语句. 但是问题又来了,Python 怎么连接 ...