并查集
ijbuhv
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #170 (Div. 1)A
//用并查集记录有几个集合,然后将总的集合数剪一即为所求答案 //注意一下全0就行 #include #include #include using namespace std ; const int maxn = 110 ; int map[maxn][maxn] ; int F[maxn] ; int n , m ; int find(int x) { if(F原创 2015-05-11 17:13:34 · 602 阅读 · 0 评论 -
codeforces 366D 并查集
//给你一个无向图,图的每条边有一个范围,所选数x要在这个范围能过这条边 //求x最大范围 //枚举所有的边的右边,对于所选右边找左边最小值,用并查集判断是否可行 #include #include #include #include using namespace std ; const int maxn = 1010; int F[maxn] ; int find(int原创 2015-05-14 21:16:21 · 672 阅读 · 0 评论 -
hdu3635Dragon Balls 并查集
//n个龙珠,在n个城市 //T a b 将包含a的所有龙珠移到b处 //Q a //龙珠a在哪个城市,这个城市有多少龙珠 , 龙珠a移动了多少次 //并查集记录所有龙珠 //对于移动的次数在find更新的时候优化一下就行 #include #include #include using namespace std ; const int maxn = 10010 ; int原创 2015-07-20 22:02:21 · 559 阅读 · 0 评论 -
hdu3047Zjnu Stadium 带权并查集
//n列个座位,排数为无穷 //m个询问 //a,b,x ,a在b前面x列 //问这m个询问与其前面询问冲突的有多少个 //带权并查集存下每个点到这个集合中最前的距离 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn = 50010 ; int F[maxn] ; i原创 2015-07-31 20:01:25 · 494 阅读 · 0 评论 -
hdu3461Code Lock 快速幂+并查集
//n个字母从a到z的字母组成的字母锁,m个区间[l,r]表示从l到r的所有字母可以同步增加 //当一个字母锁能够由另一个通过有限次的增加操作变为另一个,就表示它们是同一个 //问有多少个不同的字母锁 //如果没有联动的区间,个数为26^n个,增加一个独立的联动的区间,那么个数为26^(n-1) //因为在这个区间内的26中情况数相同的,现在是要找有多少个独立的联动区间 //对于一个区间[l,r],原创 2015-08-04 08:54:01 · 638 阅读 · 0 评论 -
hdu5443The Water Problem 并查集
//给一个无向图 //每条边有对应的权值,问对于权值不能大于x的所有 //有多少对互相能到达的点 //直接记录下所有边,按权值大小排序 //然后将所有询问离线,排序 //对于小于x的所有边,用并查集将它们连接在一起 #include #include #include #include #include #include using namespace std ; const int maxm =原创 2015-09-15 21:37:46 · 364 阅读 · 0 评论 -
hdu4750Count The Pairs 并查集
//给出n个点,m条边的无向图 //对于一个给定的t //找出有多少对(s,t)使得从s到t的所有路线中 //这些路线中权值最大得最小值小于等于t即可以 //将边以权值从小到大排序 //将询问以t从小到大排序 //对于每一次加上一条边,如果将两个集合连接 //那么可以将上的pair<s,t>为 (ss[fx]*ss[fy])*2个 //再要询问值小于这个值的所有询问都加上(ss[fx]*ss[fy]原创 2015-10-07 18:36:09 · 333 阅读 · 0 评论 -
hdu4496D-City 并查集水题
#include #include #include #include using namespace std ; const int maxn = 1e5+10 ; int F[maxn] ; int x[maxn] , y[maxn] ; int find(int x) { if(F[x] == -1) return x ; return F[x] = find(F[x原创 2015-11-15 17:37:52 · 325 阅读 · 0 评论 -
hdu3367Pseudoforest kruskal求最大生成树
//给一个图,问其边长之和最大伪森林 //伪森林是最终所有连通块最多有一个环 //刚开始的想法是在这个图的每一个连通子块找其最大生成树 //然后在这个子块中找一条不在这个树上加上去,这种想法是错误的,因为可能存在 //一个子块可能本来有两个环,但是删除一条小的边使得它成为两个子块比将这个子块删除一个环的边权和大 //正确的贪心策略是尽可能的找长的边,如果要合并的两颗子树中都有环就不合并,如果只有一个原创 2015-08-03 18:59:00 · 1186 阅读 · 0 评论