dfs
pubgoso
这个作者很懒,什么都没留下…
展开
-
2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest A.Flying Squirrel 单调栈+区间最大值+dfs
思路:先预处理出每个元素i的最大值覆盖区间[li,ri][l_i,r_i][li,ri]。然后让i和[li,i),(i,ri][l_i,i),(i,r_i][li,i),(i,ri]中的最大值连边。随后dfs从最大值开始dfs找到每个点的深度和距离所有子节点的最大距离。询问y=0 即找到子节点的最大距离。询问y!=0 :先判断大的值的区间是否能覆盖到小的值,能覆盖答案显然就是两者的深度之差。细节 见代码:#pragma GCC optimize(2)#pragma GCC optimize原创 2020-12-09 17:21:41 · 170 阅读 · 0 评论 -
hdu5937 Equation爆搜+剪枝
题目连接ps:比赛的时候刚看到题以为是网络流,后来因为建不出来图 被推翻了。然后就想不出来怎么做。。根本没往dfs+剪枝的方向想。。思路:答案最多是36,考虑先把能取满36的情况给特判掉。之后在dfs。用可行性和最优性剪枝就能通过此题。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N原创 2020-11-26 17:59:25 · 85 阅读 · 0 评论 -
Codeforces Round #617 (Div. 3) F. Berland Beauty
题目链接题意:给你一颗树和一些限制,让你构造每个边的边权满足 限制。限制:a−>ba->ba−>b的最短路径上的最小边权等于ccc.思路:把所有限制按照c从大到小排序,然后依次遍历所有限制,对每条路径上没有赋值的赋值成当前的c。如果都有值且值都大于c,那显然无解。细节见代码:#include <bits/stdc++.h>using namespace s...原创 2020-02-17 11:38:12 · 178 阅读 · 0 评论 -
牛客练习赛55E.树
题目链接题解如下:本人的做法比题解麻烦一点,也由于一个小地方的错误,导致博主调了很久。。。。。其实也没什么好说的,细节题。注意细节就行了,唯一的思维点就是转化问题,这个转化以前都没有接触过,是我太笨了。。主要计算过程都写了注释细节见代码:#include<bits/stdc++.h>typedef long long LL;#define fi first#de...原创 2019-12-14 16:09:08 · 181 阅读 · 0 评论 -
2019icpc沈阳网络赛 B. Dudu's maze(dfs)
题目链接大意:有个无向图,你从1出发,可以到任意联通的非怪物点,你至多可以选择一个可达的怪物房间使用魔法,传送到随机一个与怪物点相邻的点上,问你取得糖果的期望值(操作者足够聪明)。思路:我们先dfs记录一下,不到怪物房间就能取到的糖果数量,这一部分肯定是可以直接拿的,剩下就是从那些相邻(意为不用经过怪物房间就能到的怪物房间)的怪物房间取一个最优的。这个最优也是dfs记录从当前怪物点出发,随机...原创 2019-09-15 10:04:44 · 126 阅读 · 0 评论 -
洛谷P3384 【模板】树链剖分
题目链接很早就想学的模板,由于懒拖到现在(其实是菜)树链剖分其实是将树形结构处理成线性序列然后用数据结构来维护树的一个东西。可以解决很多树上问题。具体重要的三个函数为:一.dfs1第一遍dfs遍历这颗树,处理出每个点的子树大小(包含自己)为sizsizsiz,节点的父亲节点为fafafa,节点的深度为dedede,还有每个节点的重儿子(siz值最大的儿子)void dfs1(int n...原创 2019-08-06 15:59:58 · 173 阅读 · 0 评论 -
hdu6628 permutation 1 (dfs)
题目链接大意:给你两个数n,k,让你求出n的所有全排列中差异序列字典序第k小的排列差异序列为pi=ai+1−ai,i∈[1,n)p_i=a_{i+1}-a_i,i\in[1,n)pi=ai+1−ai,i∈[1,n)思路:直接dfs枚举差异序列从小往大搜,然后对不合法的情况去掉(差异序列中元素的最大-最小<n-1才合法,重复的也不合法)细节见代码:#include<bit...原创 2019-08-06 10:17:13 · 381 阅读 · 2 评论 -
hdu6567 Cotree (树dp换根+思维)
题目链接大意:给你两个不连通的树,让你加一条边,使得两个树联通,并且使得∑in∑i+1ndis(i,j)\sum_i^n\sum_{i+1}^ndis(i,j)∑in∑i+1ndis(i,j)最小。思路:首先我们需要一个dfs将两个联通块的点求出来,然后再用一个dfs求出以每个点的子节点个数,和每个点的子节点的dis之和,用两个数组,cnt数组记录子节点个数,dp数组记录子节点的dis之和...原创 2019-07-21 22:34:00 · 704 阅读 · 0 评论 -
Codeforces Round #484 (Div. 2)Cut 'em all!(dfs)
题目链接题意:给你一棵树,让你尽可能删除多的边使得剩余所有的联通组件都是偶数大小。思路:考虑dfs,从1出发,若当前节点的子节点和自己的数目是偶数,说明当前节点和父亲节点的边是可以删除的,答案+1,因为最开始的节点没有父节点,所以最后答案-1#include<bits/stdc++.h>#define LL long long#define fi first#define...原创 2019-04-16 10:56:24 · 91 阅读 · 0 评论 -
Educational Codeforces Round 32 E. Maximum Subsequence
题目链接题意:给你两个数n,m,和一个大小为n的数组。让你在数组找一些数使得这些数的和模m最大。解法:考虑 dfs但是,数据范围不允许纯暴力,那考虑一下折半搜索,一个从头开始往中间搜,一个从后往中间搜。在中间相遇的时间二分更新最大值即可。#include<bits/stdc++.h>#define LL long long#define fi first#define ...原创 2019-03-15 19:59:30 · 207 阅读 · 0 评论 -
Codeforces Round #527 (Div. 3) . F Tree with Maximum Cost
题目链接题意:给你一棵树,让你找一个顶点iii,使得这个点的∑dis(i,j)∗a[j]\sum dis(i,j)*a[j]∑dis(i,j)∗a[j]最大。dis(i,j)dis(i,j)dis(i,j)为iii到jjj的距离。思路:题解还是好看啊 先从1开始搜,预处理出当1为根的时候的答案记为resresres,递归的过程中假设当前节点为iii,那么sum[i]sum[i]sum[i]数组...原创 2019-03-19 20:21:28 · 106 阅读 · 0 评论 -
CF 1060E. Sergey and Subway
题目链接题意:给你一棵树,然后连接两个有公共邻居的点,问你连完后,任意两点的距离之和。一开始看这种题,还不怎么会做,借鉴了这位大佬的博客,get到了新技能,当我们求树上任意俩点的距离之时,可以转化问题,不看点,而看边,每条边的使用次数是固定的,每条边使用的次数为:这条边左边的顶点数*右边的顶点数,而由于我们可以将相隔一个点的两个点连起来,所以,如果是偶数的距离,我们可以2个2个跳,就是距离的一...原创 2019-02-21 16:02:48 · 156 阅读 · 0 评论