太菜了才做到并查集啊啊啊啊啊啊啊啊啊啊啊

还是很有收获的说

bzoj4195: [Noi2015]程序自动分析

好题 poj1456 感受到并查集传递性的美妙啊!对于一个商品,去找他过期前那天的集合假如大于0相当于可以在这天卖出,然后这个集合和前一个集合合并!

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; struct node{int v,d;}a[];
bool cmp(node n1,node n2){return n1.v>n2.v;} int fa[];
int findfa(int x)
{
if(fa[x]==x)return x;
fa[x]=findfa(fa[x]);return fa[x];
} int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].v,&a[i].d);
sort(a+,a+n+,cmp); for(int i=;i<=;i++)fa[i]=i; int ans=;
for(int i=;i<=n;i++)
{
if(findfa(a[i].d)!=)
{
ans+=a[i].v;
int fx=findfa(a[i].d);
int fy=findfa(fx-);
fa[fx]=fy;
}
}
printf("%d\n",ans);
}
return ;
}

poj1456

NOI2002银河英雄传说 这个我没有系统的学“拓展域”和“边带权”,导致写的很挫。。用了奇技淫巧。。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; char ss[];
int fa[],d[];
int findfa(int x)
{
if(fa[x]<)return x; int dis=d[x];
int f=findfa(fa[x]); d[x]=dis+d[fa[x]];fa[x]=f;
return fa[x]; }
int main()
{
for(int i=;i<=;i++)fa[i]=-i,d[i]=; int Q,x,y;
scanf("%d",&Q);
while(Q--)
{
scanf("%s%d%d",ss+,&x,&y);
if(ss[]=='M')
{
int fx=findfa(x),fy=findfa(y);
int t=fa[fy];
fa[fy]=-fa[fx], d[fy]=;
fa[fx]=t;
}
else
{
int fx=findfa(x),fy=findfa(y);
if(fx!=fy)printf("-1\n");
else printf("%d\n",max(d[x],d[y])-min(d[x],d[y])-);
}
}
return ;
}

NOI2002银河英雄传说

正经的边带权,还是很秀的边带权

poj1733 Parity game

poj1182 食物链这题之前搞死人,正经的拓展域~

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int fa[];
int findfa(int x)
{
if(x==fa[x])return x;
fa[x]=findfa(fa[x]);return fa[x];
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=;i<=n*;i++)fa[i]=i; int d,x,y,ans=;
for(int i=;i<=k;i++)
{
scanf("%d%d%d",&d,&x,&y);
if(x>n||y>n){ans++;continue;} int fx1=findfa(x),fy1=findfa(y);
int fx2=findfa(x+n),fy2=findfa(y+n);
int fx3=findfa(x+n*),fy3=findfa(y+n*);
if(d==)
{
if(fx1==fy2||fy1==fx2)ans++;
else fa[fx1]=fy1, fa[fx2]=fy2, fa[fx3]=fy3;
}
else
{
if(fx1==fy1||fx1==fy2)ans++;
else fa[fy1]=fx2, fa[fy2]=fx3, fa[fy3]=fx1;
}
}
printf("%d\n",ans);
return ;
}

poj1182

感觉这个博客就是让我存代码的

0x41 并查集的更多相关文章

  1. 算法竞赛进阶指南0x41并查集

    并查集简介 并查集的两类操作: Get 查询任意一个元素是属于哪一个集合. Merge 把两个集合合并在一起. 基本思想:找到代表元. 注意有两种方法: 使用一个固定的值(查询方便,但是在合并的时候需 ...

  2. BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]

    4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...

  3. 关押罪犯 and 食物链(并查集)

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...

  4. 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

    图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...

  5. bzoj1854--并查集

    这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连 ...

  6. [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

  7. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  8. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

  9. Codeforces 731C Socks 并查集

    题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...

随机推荐

  1. Kaggle爆文:一个框架解决几乎所有机器学习问题

      上周一个叫 Abhishek Thakur 的数据科学家,在他的 Linkedin 发表了一篇文章 Approaching (Almost) Any Machine Learning Proble ...

  2. 大数据查询——HBase读写设计与实践--转

    背景介绍 本项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的不断 ...

  3. C#中的值类型、引用类型,代码告诉你他是什么类型。

    C#代码告诉你这是什么类型. using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  4. java MD5加密的工具类

    import java.security.MessageDigest; /** * MD5加密工具类 * @author zwq */ public class MD5Util { /** * MD5 ...

  5. myslide探索

    最近查一些国内学术牛人的报告时,注意到myslide是个很好的平台,比如山大一个老师的报告,完全可以在上面看到 https://myslide.cn/slides/10774 又比如交大一个大牛老师关 ...

  6. hdu2282 Chocolate 完美匹配 + 拆点

    题意: N个箱子排成一个圈,所有的箱子里的巧克力的数量加起来不大于N,每次可以把箱子里的巧克力向旁边的箱子转移(两个方向),问要让每个箱子里的巧克力不大于1的最小步数. 分析: 把巧克力大于1的箱子拆 ...

  7. 目标跟踪ObjectT综述介绍

    此文也很详细:http://blog.csdn.net/maochongsandai110/article/details/11530045 原文链接:http://blog.csdn.net/pp5 ...

  8. VTK+MFC 系列教程 非常强大

    虽然QT才是王道!MFC的懂一些也是好的. 原文链接:http://blog.csdn.net/www_doling_net/article/details/8939115 之前介绍了基于VTK的单文 ...

  9. 我的C++笔记(函数部分)

    #include <iostream> #include <cmath>//C++的数学函数库 using namespace std; class Point{ public ...

  10. cms初步构想

    一.cms系统的初步构想 公司正准备使用yii框架重新弄个类cms的系统: 初步的功能: 栏目文章的管理 SEO的优化功能 推荐位管理 一些思路和规则: 数据库表名的定义:通过"大模块名称+ ...