博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017"百度之星"程序设计大赛 - 初赛(A)数据分割
阅读量:5277 次
发布时间:2019-06-14

本文共 1780 字,大约阅读时间需要 5 分钟。

n<=100000条相等/不等关系描述<=100000个数,把这些数据分割成若干段使得每一段描述都出现冲突且冲突只出现在最后一行。

相等关系具有传递性,并查集维护;不等关系根据相等关系进行合并,采用平衡树的启发式合并。

每次遇到相等关系x,y,先找到x,y对应并查集的根p,q,判是否p在q的不等关系中,若否说明成立,这时应合并并查集,并合并两棵平衡树,小的合到大的上。

每次遇到不等关系x,y,先找到x,y对应并查集的根p,q,判是否p和q在同一个并查集中,若否说明成立,这时应把p和q分别添加到对方的平衡树中。

平衡树调用set即可。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 //#include
8 using namespace std; 9 10 int T,n=200001;11 #define maxn 20001112 set
s[maxn];13 int cnt,vis[maxn],sta[maxn],top;14 struct UFS15 {16 int fa[maxn];17 UFS() { for (int i=1;i<=n;i++) fa[i]=i;}18 int find(int x) { return x==fa[x]?x:(fa[x]=find(fa[x]));}19 void Union(int &x,int &y)20 {21 x=find(x),y=find(y);22 if (x!=y) fa[x]=y;23 }24 }ufs;25 int x,y,id;26 int ans[maxn],lans=0,Case;27 void clear()28 {29 while (top)30 {31 int now=sta[top--];32 ufs.fa[now]=now;33 s[now].clear();34 }35 ans[cnt++]=Case;36 }37 int main()38 {39 scanf("%d",&T);40 memset(vis,0,sizeof(vis));41 top=0;cnt=1;42 for (Case=1;Case<=T;Case++)43 {44 scanf("%d%d%d",&x,&y,&id);45 if (vis[x]!=cnt) vis[x]=cnt,sta[++top]=x;46 if (vis[y]!=cnt) vis[y]=cnt,sta[++top]=y;47 x=ufs.find(x),y=ufs.find(y);48 if (s[x].size()>s[y].size()) { int t=x;x=y;y=t;}49 if (id)50 {51 if (s[x].find(y)!=s[x].end())52 {53 clear();54 continue;55 }56 ufs.Union(x,y);57 for (set
::iterator i=s[x].begin();i!=s[x].end();i++)58 {59 int now=*i;now=ufs.find(now);60 s[now].erase(x);61 s[y].insert(now);62 s[now].insert(y);63 }64 s[x].clear();65 }66 else67 {68 if (x==y)69 {70 clear();71 continue;72 }73 s[x].insert(y);74 s[y].insert(x);75 }76 }77 printf("%d\n",cnt-1);78 for (int i=1;i
View Code

 

转载于:https://www.cnblogs.com/Blue233333/p/7352289.html

你可能感兴趣的文章
ie6解决png图片透明问题
查看>>
瞬间的永恒
查看>>
2019-8-5 考试总结
查看>>
JS中实现字符串和数组的相互转化
查看>>
web service和ejb的区别
查看>>
Windows Azure Cloud Service (29) 在Windows Azure发送邮件(下)
查看>>
CS61A Efficiency 笔记
查看>>
微信上传素材返回 '{"errcode":41005,"errmsg":"media data missing"}',php5.6返回
查看>>
div或者p标签单行和多行超出显示省略号
查看>>
Elasticsearch 滚动重启 必读
查看>>
Hadoop基本概念
查看>>
java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
查看>>
浅说 apache setenvif_module模块
查看>>
MySQL--数据插入
查看>>
重新学习python系列(二)? WTF?
查看>>
shell脚本统计文件中单词的个数
查看>>
SPCE061A学习笔记
查看>>
sql 函数
查看>>
hdu 2807 The Shortest Path 矩阵
查看>>
熟悉项目需求,要知道产品增删修改了哪些内容,才会更快更准确的在该项目入手。...
查看>>