并查集
zwjdd_qwq
这个作者很懒,什么都没留下…
展开
-
洛谷P3295萌萌哒
#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<cstring>#define mod 1000000007using namespace std;const int m...原创 2019-07-29 00:23:40 · 201 阅读 · 0 评论 -
洛谷P1155 双栈排序(并查集)
我们开一个两倍并查集如果i和j不在一个栈,那么合并i,j+n和j,i+n;怎么判断i,j能不能在一个栈呢如果一个数比后面的一个数小,而且比他后面最小的数要大的话,就一定不能在一个栈为什么呢,因为是顺序输出,那么如果数x小于数y那么x一定在y之前出栈,但是如果y后面最小的数z比x小,那么z之前x一定不能出栈,就形成了矛盾;那么判不合法也就简单了起来;处理完这个之后,我们进行染色操作,对于一...原创 2019-08-17 23:01:30 · 99 阅读 · 0 评论 -
洛谷P2934 [USACO09JAN]安全出行Safe Travel
首先读懂题意,这道题目的意思是对于每一个点xxx,断去1−>x1->x1−>x最短路径上的最后一条边,求此时的最短路径感觉一下子除了暴力没有思路那么我们反向思考一下,一条不在最短路径上的边会有什么贡献呢我们假设有一颗最短路径树,那么这一条不在最短路径上的边,一定连接了两个不为父子关系的节点假设有一颗树是这样的虚线为一条非树边,我们断去u上方的边,就变成...原创 2019-09-04 00:08:07 · 180 阅读 · 0 评论 -
洛谷P4180 【模板】严格次小生成树[BJWC2010]
rt,模板题思路挺简单,每次找到不在最小生成树的一条边,断开from>tofrom>tofrom>to在树链上不等于该边边权的最大边更新答案就好了,这里主要是注意一定要不等于该边边权,因为严格次小是发方法还是倍增,我们的倍增数组维护最大值和次小值就好了max2[j][i]=max(max2[fa[j][i-1]][i-1],max2[j][i-1]);i...原创 2019-09-13 22:58:03 · 141 阅读 · 0 评论 -
「LLH邀请赛」参观路线
很奇妙的一题,实际上如果你写过类似的题目并不难想我们考虑裸暴力的写法从1点开始暴力dfs,暴力判断当前点是否可以走(没有走过或者道路摧毁)这样你只能拿到低的可怜的暴力分我们考虑上述写法的问题在什么地方,我们的dfs是这样写的void dfs(int k){ ...... for(int i=1;i<=n;i++){ if(!used[i]){ used[i]=1; ...原创 2019-09-26 00:16:22 · 155 阅读 · 0 评论 -
「Usaco2008 Open」奶牛邻居
这题的关键在于转化曼哈顿距离为契比雪夫距离由一个加法变成一个取max我们重新定义一个坐标为(x,y)(x,y)(x,y)的点的坐标为(x+y,x−y)(x+y,x-y)(x+y,x−y)这样,两个点的距离就变成了max(x1,−x2,,y1,−y2,)max(x_1^,-x_2^,,y_1^,-y_2^,)max(x1,−x2,,y1,−y2,)我们使用双指针维护,保证在当前区间内...原创 2019-10-08 20:29:48 · 141 阅读 · 0 评论 -
「Usaco2010 Feb」覆盖牛棚
主要思路,并查集缩点对于可以合并的栏杆,我们强行合并成一个栏杆当然要保证最优然后一点点更新即可#include<cstdio>#include<algorithm>using namespace std;const int maxn=2e6+3;struct node{int l,r;}p[maxn];int nex[maxn],pos[maxn],jum...原创 2019-10-08 20:47:42 · 145 阅读 · 0 评论 -
「Usaco2011 Jan」瓶颈
这题,主要是想清楚每个点的过程对于一个点,他能走完,当且仅当,流向它的权值和小于它流出的权值那么我们就有了很多时间点但是如果一个点走完了呢,我们把他缩起来,变成一个新的节点,重新我们离线一下询问,动态的更新答案即可#include<iostream>#include<cstdio>#include<cstdlib>#include<cmat...原创 2019-10-08 21:06:33 · 222 阅读 · 0 评论