hdu 6109(并查集+set)

HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A)) 数据分割 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1119    Accepted Submission(s): 268 Problem Description 小w来到百度之星的赛场上,准备开始实现一个程 阅读详情

hdu 6109
思路:尽量让多的条件满足,当有一个条件和前面的冲突时,就是分隔符的时候,用并查集维护相同的数,set维护不同的数。当两个数在同一个并查集中时,代表两个数相同,不在同一个并查集是说明两个数可能相同也可能不同。当a在b的set中时代表b和a不相同。所以当我们每次判断两个数是否相同时先找并查集,并且要顺带更新set因为a==b, b≠c ,所以 a≠c 但是这样每次更新一个并查集里面的所有元素复杂度太高一不好写,所以当每次找的时候我们只需要将子节点的set加到父节点的set理解好了然后判断两个祖先节点的set是否有出现过,有的话就代表 a≠b 。

#include<set>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using 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]);
    }
}
Oracle登录报错ORA-12560?5分钟搞定TNS协议适配器错误的完整修复指南 本文详细解析了Oracle登录报错ORA-12560(TNS协议适配器错误)的成因与解决方案。从基础服务检查到高级网络配置排查,提供了一套完整的修复流程,帮助数据库管理员快速解决连接问题,确保Oracle数据库的稳定运行。 阅读详情

相关推荐

红米12C刷机避坑指南:NV数据损坏的修复与系统版本选择

本文提供了红米12C刷机过程中避免NV数据损坏的详细指南,涵盖系统版本选择、SP刷机工具使用和fastboot命令修复。重点分析了NV数据损坏的原因与表现,并给出通过工程固件和深度修复技巧解决基带未知、IMEI丢失等问题的实操方案,帮助用户安全完成刷机。

cuda7parallel的博客 1074

hdu6109(并查集+启发式合并)

题面 题意就是有n个数,不断给你条件,如i=j或i!=j 你要把条件扔进一个栈里。 若出现一个条件和栈里的条件出现冲突 输出栈的大小+1&&清空栈 等于是满足传递性的,故等于关系可以用并查集维护,同一个集合的表示它们都相等。 若出现不等关系,且它们在同一个集合里,则冲突,否则这两个点连一条边 如果来了一个相等关系,且它们所在的两个集合之间有连边,则冲突,否则合并这两个集合。 具体实

KKiseki的博客 746

嘉立创EDA报错:元件引脚与焊盘未对应报错解决记录

原件引脚与焊盘未对应报错解决方法,一文总结!

2303_77013775的博客 1万+

HDU6109:并查集+set

HDU6109 题意:开始题目看来半天每看懂。。。 i,j表示某个数的编号,题目给你约束条件,以i,j为编号的数相等(e=1)或者不相等(e=0)。将这么多约束条件按顺序分组。 每一组满足约束条件矛盾,但是去掉最后一组就不矛盾了。求共有几组和每组的数量。就是这样~喵 题解:不知不觉~迷迷糊糊~就一次AC了 首先用并查集来维护。 1、如果之前两个数在一个集合里面(fx = fy),就表示...

FlyingJack 318

[OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-下...

[OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-下 CT Image with Window presets This is an example of displaying a ct image along with buttons to set ww/wc pres...

浩秦的博客 1841

OnlyOffice Docker部署全攻略:解除连接限制+文件大小限制+中文字体优化

本文详细介绍了OnlyOffice企业级Docker部署的完整解决方案,重点破解连接限制、文件大小限制和中文字体优化三大核心痛点。通过定制化镜像部署、性能调优配置和中文字体深度优化,帮助企业实现高效稳定的文档协作平台。

weixin_28837817的博客 366

hdu 6109 数据分割

并查集

weixin_46266058的博客 370

Notepad++ XML Tools插件:手把手教你格式化混乱XML与一键语法检查(保姆级教程)

本文详细介绍了如何使用Notepad++的XML Tools插件格式化混乱的XML文件并进行一键语法检查。通过插件安装、格式化实战和语法排错的完整流程,帮助开发者高效处理XML数据,提升API通信和数据存储的工作效率。特别适合需要快速验证和整理XML配置的开发人员。

weixin_42619742的博客 322

HDU 6109 数据分割 并查集,SET

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 题意:中文题面 解法:每次都贪心地尝试将尽量多的条件放进当前这组,遇到第一个与已有条件冲突时,就是分割的时候。相等具有传递性,直接用并查集维护,不相等的关系用set维护,注意到x1=x2,x1!=x3,x2!=x4,那么有x1!=x4,x2!=x3,所以用并查集合并(x1,x2)的...

aishangg437965的博客 178

【CANoe】CANoe的 I/O功能-以VN1640A为例

Canoe的 I/O功能-以VN1640A为例

星Yeah 的博客 7867

提示词驱动的多智能体协作系统

《提示词驱动的多智能体协作系统》 关键词:人工智能、多智能体系统、协作机制、提示词驱动、系统设计与应用 摘要:本文深入探讨提示词驱动的多智能体协作系统,首先介绍其背景和核心概念,然后详细分析多智能体系统的基本原理和提示词驱动的协作机制,最

AI天才研究院 846

HDU 6109 数据分割 set、并查集+启发式合并

http://acm.hdu.edu.cn/showproblem.php?pid=6109 Problem Description 小w来到百度之星的赛场上,准备开始实现一个程序自动分析系统。 这个程序接受一些形如xi=xj 或 xi≠xj 的相等/不等约束条件作为输入,判定是否可以通过给每个 w 赋适当的值,来满足这些条件。 输入包含多组数据。 然而粗心的小w不幸地把每组数据之间的分隔符删掉了...

xiji333的博客 373

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

hdu6109 数据分割(并查集+set)

题目:hdu6109 思路:每输入一行合并一下,如何产生矛盾则说明该行为后为分隔符。 合并用并查集,同时还需要一个维护一个set来存储不等条件之间的关系。 利用两个数组flag 和flag2来作为并查集和set的“脏位”。 代码如下: #include &lt;cstdio&gt; #include &lt;algorithm&gt; #include &lt;set&gt; usin...

hey 330

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

hdu 6109 数据分割(并查集+set)

题目链接:hdu 6109 数据分割 题意: 给你一些不等和相等关系,然后分割,每次都按第一个不成立的等式分割。 题解: 由于相等关系具有传递性,不等关系不具有传递性。 所以相等关系可以由并查集来存储,不相等关系用set来存,目的是为了让查找log(n) 然后在两个集合进行合并的时候,要采用启发式合并的方式,及每次都将小的集合的每个元素放进大的集合。 这样启发式合并的总复杂度为nlo...

weixin_30443075的博客 137

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

hdu6109 数据分割【并查集+set】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 题意:中文题 解析:由于相等具有传递性,那么可以选择用并查集来维护,即若干个相等的就是一堆,那么对于不等号来说,是无法传递的,于是可以选择用set来维护,比如对于x这个集合来说,里面的所有元素都是与x不等的。这些是对于数据结构的选择,那么有一些要注意的点就是,当你两个相等的元素合并时,其不等的

22h's Blog 436

【百度之星初赛A】1002 数据分割(并查集+Set)

在比赛的时候直接想到的就是用并查集加Set的做法,但是由于评测爆炸,只交了一发还没有过。赛后有好好想了之前的思路,还参考了一些博客,发现这种做法的确可以AC。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 分析: 如果两个元素是相等的那就将它们合并到一起,同时用Set记录不相等的数,开一个Set数组,Set[i]表示与

receiling的博客 318

hdu6109数据分割(并查集+set)

一道好题,忍不住转载记录下。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 思路(转): 既然题目说每组数据把最后一个约束条件去掉就合理 那么只要将这L组约数条件从前往后遍历一下就好了 初始化一个空集,将约束条件一个一个加入集合里,当加到某个约束条件之后不合理了, 就说明这是最后一个约束条件,把它删掉,之后集合里剩下的约束条

exp1ore的博客 544

hdu 6109 数据分割(并查集+set合并)

数据分割Problem Description小w来到百度之星的赛场上,准备开始实现一个程序自动分析系统。这个程序接受一些形如xi=xj 或 xi≠xj 的相等/不等约束条件作为输入,判定是否可以通过给每个 w 赋适当的值,来满足这些条件。输入包含多组数据。 然而粗心的小w不幸地把每组数据之间的分隔符删掉了。 他只知道每组数据都是不可满足的,且若把每组数据的最后一个约束条件去掉,则该组数据是可满

Darkarts 706

HDU 6109 数据分割(并查集+set维护)

 题目:http://acm.hdu.edu.cn/showproblem.php?pid=6109 题意:给n行数,a,b,e  e为0表示两个数不相等,e为1表示相等。 要求划分数据 ,让每一组数据都不符合,去掉最后一个就符合, 题解: 相等的就在一个集合,集合之间有边表示两个集合不相等 例如给出a,b,e, 并查集初始化后祖先为x,y 若e==1: x==y时,a==b,在一个...

恒持此志成永志 311

hdu6109(并查集+set/倍增)

题目   http://acm.hdu.edu.cn/showproblem.php?pid=6109 分析   对于相同的条件,明显直接并查集   对于不同的条件,可以用set来保存,并查集合并的时候也要对set启发式合并   还有另一种很奇妙的做法   如果我们只考虑一段[l..r]是否可行,那么我们可以离线,先挑出相同的条件构出并查集,然后对所有的不同条件进行判断就行了   这...

weixin_30753873的博客 113

百度之星2017 HDU 6109 数据分割 并查集+set

数据分割 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 Description 小w来到百度之星的赛场上,准备开始实现一个程序自动分析系统。这个程序接受一些形如xi=xj 或 xi≠xj 的相等/不等约束条件作为输入,判定是否可以通过给每个 w 赋适当的值,来满足这些条件。输入包含多组数据。然而粗心的小w不幸地把每组数据之间的分隔符删...

weixin_30362083的博客 135

hdu 6109 数据分割(并查集+set合并)

思路: 如果是相等,则看作一个集合,如果不等,则将两个集合连边。 在判断的时候,如果相等的集合中操作是0,就不对; 如果不等的集合操作是1,就不对 #include #include #include using namespace std; const int maxn=100005; set g[maxn]; int n,m; int a[maxn],b[maxn],c[maxn

GameRoad 759

HDU 6109 百度之星2017 1002 数据分割(并查集+set)

题目链接百度之星2017 1002分析个比赛的时候想到了并查集+set的做法,只是评测实在太慢了,也没仔细想set处理合并的复杂度,赛后发现原来直接暴力合并set就行了 (不能分析复杂度是多少)AC code//Problem : 6109 ( 数据分割 ) Judge Status : Accepted //RunId : 21701687 Language : G++ Aut

taotao 的大学墓志 926

HDU 6109 数据分割(并查集+set+在线倍增法)

Description小ww来到百度之星的赛场上,准备开始实现一个程序自动分析系统。这个程序接受一些形如xi=xjxi=xj或xi≠xjxi≠xj的相等/不等约束条件作为输入,判定是否可以通过给每个ww赋适当的值,来满足这些条件。输入包含多组数据。 然而粗心的小ww不幸地把每组数据之间的分隔符删掉了。 他只知道每组数据都是不可满足的,且若把每组数据的最后一个约束条件去掉,则该组数据是可满足的。请

ZSQ 612

【并查集】(并查集的合并中 使用了启发式合并)数据分割 HDU - 6109 (相等关系:并查集 不等关系:set)

Key Point: 相等关系:可传递的,使用并查集进行检验 不等关系:不可传递,使用set进行检验 (如 X1 != X2 X1 != X3 但是X2 = X3 是可以成立的) 数据分割 HDU - 6109 小w来到百度之星的赛场上,准备开始实现一个程序自动分析系统。 这个程序接受一些形如xi=xj 或 xi≠xj 的相等/不等约束条件作为输入,判定是否可以通过给每个 w 赋适当的值...

Floraqiu的博客 371
上一篇: 高斯消元
下一篇: hdu 6143
acmer_zp
博客等级 码龄11年 18粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值