hdu 6109 数据分割
/**
* 题目描述有点坑,勉强能读懂,大致意思,有多组约束条件。原本每组数据之间是有分界符号的
* 现在分界符号没了,让你找出原来每组数据多少个条件,并且告诉,每组的最后一个条件会使得与前面的
* 条件冲突。
*
* 解题思路:膜拜大佬的解法,并查集+set大法。a==b 的约束条件用并查集,a!=b的约束给这个集合建边。
* 代表这两个集合不等。本题时间复杂度不太会计算。这样总感觉极限数据会TLE。结果就AC了。很绝望!
* 提供一种解题思路吧,倍增感觉很厉害,目前不知道怎么写》》
*/
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <set>
#include <map>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
using namespace std;
typedef long long LL;
const int INF=2e9+1e8;
const int MOD=1e9+7;
const double eps=0.0000000001;
void fre()
{
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
}
#define MSET(a,b) memset(a,b,sizeof(a))
const int maxn=1e5+10;
int a[maxn],b[maxn],e[maxn],pre[maxn];
set<int>G[maxn];
void init(int n) //清空并查集和set图
{
for(int i=1;i<=n;i++)
pre[i]=i,G[i].clear();
}
int F(int x)
{
return x==pre[x]?x:pre[x]=F(pre[x]);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
vector<int>ans;
init(n);
int sz=0;
for(int i=1;i<=n;i++) scanf("%d%d%d",&a[i],&b[i],&e[i]);
for(int i=1;i<=n;i++)
{
sz++;
int x=F(a[i]),y=F(b[i]);
if(e[i]) //如果是 a==b
{
if(x==y) continue;//a,b在同一个集合,a==b成立,不管。
else
{
if(G[x].find(y)!=G[x].end()) //a==b; a,b不在一个集合,存在边说明两个集合不等,显然不成立;统计答案
{
ans.push_back(sz);
sz=0;
init(n);
}
else // a==b; a,b不在一个集合,a,b所在的集合不存在边,成立;
{
set<int>::iterator it;
for(it=G[x].begin();it!=G[x].end();it++) //合并set,
//意思是:将与x相连的边删掉,让他们和y相连
{
G[y].insert(*it);
G[*it].erase(x);
G[*it].insert(y);
}
G[x].clear();
pre[x]=y;
}
}
}
else // 判断 a!=b
{
if(x==y) // a!=b ,a,b同在一个集合,不成立;
{
ans.push_back(sz);
sz=0;
init(n);
}
else G[x].insert(y),G[y].insert(x);//a!=b,a,b不在同一个集,两集合之间建边;
}
}
printf("%d\n",(int)ans.size());
for(int i=0;i<(int)ans.size();i++)
printf("%d\n",ans[i]);
}
return 0;
}
/**************************************************/
/** Copyright Notice **/
/** writer: wurong **/
/** school: nyist **/
/** blog : http://www.cnblogs.com/coded-ream/ **/
/**************************************************/
hdu 6109 数据分割的更多相关文章
- HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A))
数据分割 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 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"百度之星 ...
- HDU 6109 数据分割 并查集,SET
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 题意:中文题面 解法:每次都贪心地尝试将尽量多的条件放进当前这组,遇到第一个与已有条件冲突时,就 ...
- MongoDB分片之数据分割方式
随着移动互联网的发展,大量的非结构化数据随之产生,不仅对数据库存储大数据提出了新的要求,同时对于查询数据和进行大数据分析也提出了苛刻的要求,这些显然是单服务器处理能力无法满足的,自然建立一个集群是不可 ...
- Hadoop ->> 关于数据分割(Data Split)的思考
今天开始学习Hadoop这门热门的数据库技术.直接从被奉为Hadoop圣经的<Hadoop The Definitive Guide 4th Edition>入手.第一章作者写到一个关于分 ...
- 2017"百度之星"程序设计大赛 - 初赛(A)数据分割
n<=100000条相等/不等关系描述<=100000个数,把这些数据分割成若干段使得每一段描述都出现冲突且冲突只出现在最后一行. 相等关系具有传递性,并查集维护:不等关系根据相等关系进行 ...
- HDU 2050 折线分割平面(转)
折线分割平面 http://acm.hdu.edu.cn/showproblem.php?pid=2050 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微 ...
- 【2017"百度之星"程序设计大赛 - 初赛(A)】数据分割
[链接]http://acm.hdu.edu.cn/showproblem.php?pid=6109 [题意] 在这里写题意 [题解] 要处理的关系越多,肯定就越容易错. ->单调性. 根据这个 ...
- hdu 2050:折线分割平面(水题,递归)
折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
随机推荐
- 分享一套C++入门基础视频
本课程从C++起步.用户无需不论什么计算机基础,仅仅须要懂的主要的电脑操作,既可学习本课程.本课程适合在校大学生,在职人员等,通过本课程的学习,学员可掌握C++\MFC\VC++server端.网络编 ...
- MySQL常用经典语句
http://www.cnblogs.com/see7di/archive/2010/04/27/2239909.html MySQL常用经典语句 .重命名表ALTER TABLE tbl1 RENA ...
- 双十一前4小时,CentOS 6.5server启动错误排查
11月10日晚上8点多.眼看要到双十一了... 但我要说的这段经历却和双十一毫无关系.哈哈. 这天准备向CentOS6.5server的svn上传一些文件,结果开机启动时,却出现了以下的界面: 这是肿 ...
- linux下性能监控工具
一. Linux 性能监控的概述 系统由若干子系统构成,通常改动一个子系统有可能影响到另外一个子系统.甚至会导致整个系统不稳定.崩溃. 所以说优化.监測.測试一般是连在一起的,并且是一个循环并且长期 ...
- Android 逐帧动画( Drawable 动画),这一篇就够了
前言 作为 Android 最常见的两种动画形式,逐帧动画( Drawable 动画),有着极其广泛的应用,它的原理与早起的电影以及 GIF 类似,就是把一张的图,按顺序快速切换,这样一来看上去就好像 ...
- Ubuntu/CentOS下源码编译安装Php 5.6基本参数
先确认安装libxml2 apt-get install libxml2 libxml2-dev或者yum install libxml2 libxml2-dev ./configure --pref ...
- python 基础 1.5 python数据类型(三)--元组
一.python的数据类型 序列--元组 1.序列 1>字符串,列表,元组都是序列. 2>序列的两个特点是索引操作符和切片操作符 索引操作符:我们可以从序列中抓取一个特定项目 切片操作符: ...
- TP框架---thinkphp修改删除数据
1.在控制器MainController里面写一个方法,调用Nation表中的数据. public function zhuyemian() { $n = D("Nation"); ...
- 1、找出url汇总页,过滤出满足条件的详情页url;2、去详情页采集信息
1.找出url汇总页,过滤出满足条件的详情页url:2.去详情页采集信息 package main import ( "fmt" "github.com/gocolly/ ...
- thinkphp5 (最棒的php开源框架)
tp5的唯一可访问目录是public,即项目根目录: http://localhost/tp5/public/ 开发规范: 类库.函数文件统一以.php为后缀 类(命名和路径)和命名空间保持一致 类文 ...