![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
文章平均质量分 55
QAQQQQQQQQQQQ
菜
展开
-
并查集
luogu2661信息传递 并查集和图论·· 就是给一个有向图找最小环 思路为一边并集一边更新路径长度 代码: #include #include #include using namespace std; int n,pic[200005],fa[200005],a[200005],minn=0x7fffff; int find(int x) { if(x!=fa原创 2018-01-03 13:12:36 · 228 阅读 · 0 评论 -
并查集+朴素LCA--bzoj4668: 冷战
传送门 边权为时间,是递增的,所以连边不会影响答案,不能路径压缩所以用树高按秩合并,然后每次询问的时候找到两个点到lca的路径上最大值就是答案 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #defi...原创 2018-08-18 22:04:36 · 231 阅读 · 0 评论 -
并查集+二分答案--bzoj1821: [JSOI2010]Group 部落划分
传送门 这道题可以用kruskal做,不过我觉得二分答案复杂度第一些? 二分一个答案mid,检查的时候遍历所有点对,如果i,j的距离比mid小,那么他们一定在一个联通块内 此时让fa[find(i)]=ffind(j) 注意因为find(i)会变,所以要每次重新算,不能在前面先算find(i),因为这个wa了无数次 二分时可以二分平方保证精度最后再开根 代码如下: #incl...原创 2018-09-01 18:36:25 · 200 阅读 · 0 评论 -
tarjan求点双+树上倍增/圆方树+并查集--business
对我没打错名字,就是businessbusinessbusiness 题目: solution: 这道题有很多种写法,先说我的: 先tarjantarjantarjan求点双,一个点双里的点都可以到达那个最小的点,然后每个割点向他在的点双连边建出一棵树,然后用STSTST表一类的树上倍增方法求解,细节很多,注意有些数组空间要开大一倍,注意特判s,ts,ts,t在同一个点的情况 还有一种高级写法...原创 2018-11-07 15:11:24 · 198 阅读 · 0 评论 -
LCT(维护边双)--bzoj1969: [Ahoi2005]LANE 航线规划
传送门 用LCTLCTLCT维护边双,删边不好操作,可以离线后变成加边。 如果两个点u,vu,vu,v已经联通,再加一条(u,v)(u,v)(u,v)的边就会让它变成边双,所以可以用并查集维护联通性。 当一条链变成边双就把它在LCTLCTLCT上缩成一个点,具体的可以直接在splaysplaysplay上dfsdfsdfs把所有点的父亲都修改成一个点,而做其他操作如splaysplaysplay和...原创 2018-12-02 19:06:32 · 259 阅读 · 0 评论 -
LCT(动态最小生成树)+kruscal--bzoj2594: [Wc2006]水管局长数据加强版
传送门 (好久不打lct板子都快忘了 lct维护边权的套路就是把边拆成点,这个点向两边的点分别连边,点权就是边权,原树上的点根据需要可以设点权为inf或者-inf 动态最小生成树离线删边变加边,就是在lctlctlct中记录mx[x]mx[x]mx[x]和id[x]id[x]id[x]表示子树点权中最大的点权和点的编号,加入一条新边(x,y)(x,y)(x,y)的时候,如果两点没有联通就连起来,如...原创 2018-12-21 19:05:09 · 327 阅读 · 0 评论