关闭

[agc002d]Stamp Rally

前言简单套路题。题目大意一副连通图,每次询问从两个点x和y出发走出两条路径,希望至少经过一次的点数量等于z,经过的边最大编号最小是多少。简单题假如可以暴力,你可以按编号从小到大加入边,如果x和y不在一个联通块,能经过的点等于两个所在联通块大小的和,否则等于所在联通块大小,找到第一次大于等于z的位置。 不枚举也可以二分。 那不如整体二分吧,并查集采用按秩合并,好处是容易撤销。#include<cs...
阅读(36) 评论(0)

[agc011c]Squared Graph

前言很简单的计数套路。 没看过题解我有可能做复杂了。题意不想讲。做法先讲原图孤立点统计贡献,接下来讨论的所有点均不孤立。 我们想要统计一个联通块,可以统计特征点的个数。 即对于一个x.y,如果其是特征点,不存在与其联通的一个点t.u满足t<xt<x或x.z满足z<yz<y。 容易发现特征点第一维只能是原图中其所在联通块的最小编号点。 第二维如果也是最小编号点,显然也是可以的。 还有一种情...
阅读(72) 评论(0)

[bzoj3060]Tour de Byteotia

题目大意给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上。贪心把两边编号都>k的边先加入。 再把剩余的边加入,若形成环就删去新加边。 闭上眼睛感受当然最优。#include #include #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; const int...
阅读(132) 评论(0)

港湾

题目描述放假啦! 小林和康娜来到了港口,看到有货船正在卸货。 港口十分狭窄,只有两个卸货区可以使用。每个卸货区上面可以堆积任意多个箱子。 每卸下来一个箱子,工作人员都会把这个箱子放在某个卸货区的顶端。之后,当车辆来运走这个箱子的时候,也必须保证这个箱子在某个卸货区的顶端。 港口今天一共运来了N个箱子,第i个箱子在时刻Ai被卸货,在时刻Bi被取走。康娜发现,每个箱子被取走时,都恰好位于所在卸货...
阅读(209) 评论(0)

[bzoj1016][JSOI2008]最小生成树计数

题目大意给定n个点m条无向边的图G,求G的最小生成树个数,模31011。 其实有个特殊条件但我们的高端做法可以忽略。 n<=100,m<=1000矩阵树定理我们来思考一个图G所有最小生成树的同一个性质: 假如我加入所有边权<=w的边,任何生成树的联通情况一定是一致的。 脑补得证QAQ 或者你考虑反证+切割引理。 我们把边权相同的边当做一组边,每次在原来的基础上把这样边都加入。例如原本三个...
阅读(169) 评论(0)

[51nod1743]雪之国度

题目大意对于一个无向图,边有边权。对于每组询问u、v,如果可以找到两条从u到v不相交的路径,输出路径上边权最大值的最小值。维护边双我们考虑到,如果按照边权从小到大加边,第一次使得u和v处在同一个边双联通分量时我就求得了答案。 考虑一个很强的方法,用LCT或启发式合并维护森林,动态维护双连通分量。 因为不可能去持久化+二分求询问,我们可以再思考,每次将两个边双合并意味着一次集合合并,我们建一个新点...
阅读(213) 评论(0)

[bzoj4690]Never Wait for Weights

题目大意一堆未知数,之间有权值关系如x-y=z 每次给出关系或询问两个未知数的差权值并查集关系的维护显然用并查集。 每个节点维护如果父亲权值为0我的权值应该是多少即可。#include #include #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; const int maxn=100000...
阅读(156) 评论(0)

Dash speed

题目大意一颗树,每条边有边权[l,r]。 多次询问每次给定一个权值v,保留树上所有的边[l,r]使得l<=v且v<=r,然后求这片森林的最长简单路径长度。经典CDQ考虑分治算法 把每条边插入线段树区间中 然后一个权值的答案就是加入根到其对应叶子路径上经过的线段树节点上的所有边。 然后对线段树进行遍历,用并查集维护集合内的直径。因为要支持撤销,所以只能按秩合并不能路径压缩。 然后我跑的贼慢。...
阅读(239) 评论(0)

[CF593D]行走

题目大意一颗树边上有边权,每次要么把一条边边权改小(不会改到1以下),要么给定权值v,让它沿一条路径整除下去,问最终变成多少。 所有权值均在10^18以内套路除以大于1的数最多除64次就会变成0。 边权只会改小,于是我们把边权为1的缩起来。 并查集实现即可。#include #include #include #define fo(i,a,b...
阅读(84) 评论(0)

graph

题目大意维护一个图,若干操作每次加入一条边或删除一条已有边,每次操作后都输出该图是否为二分图。CDQ预处理每条边的存在时间。 考虑一个时刻,此时存在的边是所有存在时间区间包含该时刻的。对于每个时刻做的话,就是把所有包含该时刻的时间区间对应边加入并查集。 现在考虑把所有时刻一起做。 solve(l,r)表示解决[l,r]所有询问,先把所有时间区间刚好为[l,r]的加入并查集,对于剩余边,要么分到...
阅读(151) 评论(0)

Ztxz16学图论

题目大意给定一张图,每次询问编号在[l,r]的边连上后会形成多少联通块。离线做法我们考虑莫队。 考虑左端点所在的每一块,左端点到块末最多根号的距离,右端点是单调的。并查集容易添加,因此只保留块末到右端点的联通情况,每次暴力加上块末到左端点部分。在线做法把加入1~i条边,每条边权值设置为编号,所形成的最大生成树叫第i个版本。 [l,r]的答案=第r个版本中联通块数量+第r个版本中[1,l-1]存在...
阅读(421) 评论(0)

冷战

题目大意有两种操作,添加一条边或者询问两点在哪次操作后联通。 强制在线。辣鸡LCT一条边的权值是其的加入时间。 询问操作便是询问路径上的最大值。 我们不会维护边权,因此可以把边变成的点,向两端连边。 愉快被卡常。#include #include #define fo(i,a,b) for(i=a;i<=b;i++) using namespace st...
阅读(248) 评论(0)

[UER #1C]Dzy Loves Graph

题目大意有n个结点,初始没有边。m个操作,操作类型有三: 1、a与b之间连一条长度为i的边(i为操作编号) 2、删除比边权最大的k条边。 3、撤销刚刚执行的操作,保证撤销的不是撤销操作。 每次操作后输出最小生成树所有边权和。可持久化并查集有许多版本,于是我们发现版本之间形成树的结构,为什么? 加入的边越来越大,因此删除操作相当于跳到k级祖先,每次添加操作就在下面加一个儿子,所以是树的结构。...
阅读(315) 评论(0)

[bzoj2733][HNOI2012]永无乡

题目大意有n个点,初始时有一些边。 每次操作要么加一条边,要么询问一个点所在联通块数值第k大的点。水题联通情况并查集维护,每个连通块再对应一个权值线段树。 合并连通块就是线段树合并。#include #include #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; const int maxn...
阅读(547) 评论(0)

[bzoj4551][TJOI&HEOI2016]树

题目大意一颗树,除根节点外初始都是白点,根节点是黑点。 每次染黑一个结点或者询问一个结点的最近黑色祖先。倒序处理倒着做,于是每次是染白一个结点。 那么就并查集搞呀!#include #include #define fo(i,a,b) for(i=a;i=b;i--) using na...
阅读(711) 评论(0)
22条 共2页1 2 下一页 尾页
    个人资料
    • 访问:251935次
    • 积分:10104
    • 等级:
    • 排名:第1813名
    • 原创:743篇
    • 转载:4篇
    • 译文:0篇
    • 评论:189条
    最新评论
    文章分类