dfs
weixin_44019404
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #695 (Div. 2) E. Distinctive Roots in a Tree
考虑树上dp。down[u]down[u]down[u]表示以u为根结点,向下的最小代价。up[u]up[u]up[u]表示以u为根结点,向上的最小代价。每一次更新向下的时候,如果字节点不行,那他自己肯定不行。如果字树内有一个和u相同,肯定不行。向上更新的时候,假设uuu的父亲节点是fff,首先我们需要删除掉u从f的子树中。然后判断除了u和他的子树以外,是否有和u相等的点。再继承父亲节点的up[u]up[u]up[u]值。这里使用了主席树去查询。//// Created by bytedance原创 2021-01-25 21:27:24 · 151 阅读 · 0 评论 -
2020牛客暑期多校训练营(第二场) C Cover the Tree
假设叶子节点是L个。首先可以证明下界是L+12\frac{L+1}{2}2L+1。所以我们先把叶子节点抽出来,然后通过dfs序排序好。记为[1,L][1,L][1,L]然后连接[i,i+L2](i<=L2)[i,i+\frac{L}{2}](i<=\frac{L}{2})[i,i+2L](i<=2L)我们假设有一颗子树,他的叶子节点编号是[l,r][l,r][l,r],假设r<L/2r<L/2r<L/2那么该子树到根节点的链,肯定会被[l,l+L2][l,l+原创 2020-07-15 15:20:12 · 131 阅读 · 0 评论 -
Codeforces Round #633 (Div. 2)
A - Filling Diamonds#include<bits/stdc++.h>using namespace std;#define ll long long#define ld long doubleinline bool isprime(ll num){if(num==2||num==3)return true;if(num%6!=1&&num...原创 2020-04-13 17:24:47 · 139 阅读 · 0 评论 -
dp训练17 219D - Choosing Capital for Treeland
令dp[u]表示,以u为节点,向下走的路径数目。一次dfs能够做完。再令f[u]表示,以u为节点,向上走需要的代价。对于u的子节点v,计算v向下走的代价,计算v向上走的代价。向上走的代价=(u去掉v向下走的代价+f[u])所以f[v]=(u去掉v向下走的代价)+f[u]#include<iostream>#include<cstring>#include<...原创 2020-03-17 11:01:42 · 84 阅读 · 0 评论 -
Educational Codeforces Round 78 (Rated for Div. 2)
A题:暴力然后排序用string比较就好。B题:找规律?可能emm首先第i次加i,记前缀和为sum,要两个数字相等,至少sum>=两个数字的差。我们进一步思考,当sum!=差的时候,记sum-dis=x。如果x是偶数,x/=2,然后该数字x一定是出现在sum里面的数字,我们将x分给大的数字,那么大数字增加x,小数字减小x,就可以相等了。当x是奇数,我们没有办法相等,继续加上i+1...原创 2019-12-21 19:04:58 · 199 阅读 · 0 评论 -
打卡 Codeforces Round #599 (Div. 2)
A题水题,贪心即可。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>...原创 2019-12-21 18:23:56 · 115 阅读 · 0 评论 -
第七天打卡 Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
A题:找出有多少个每一个位置上数字都相同的数。模拟即可。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#in...原创 2019-12-17 09:18:39 · 94 阅读 · 0 评论 -
2019 ICPC Asia Nanjing Regional 重现赛
C. Digital Path题意:给出一个网格,格子里面有各自的值,要求找出有多少条线路,是从某一个块四周自己最小开始走到某一个块,四周自己最大并且长度大于等于四。解:显然,对于某一块,我们判断他能不能成为起点,就可以判断他的上下左右是否比他小1,比他小1那么肯定不能作为起点。判断终点同理。那么针对每一个起点,我们首先暴力dfs,判断他的上下左右是否满足比他刚好大1,有的话继续dfs下去...原创 2019-12-04 19:26:21 · 342 阅读 · 0 评论 -
cf339-c
题意:往天平两边按照左右左右的顺序放置砝码,往左放了砝码后,左边需要比右边重,往右边放置砝码后,右边需要比左边重,给出现有的砝码种类数量不限,求一个放置的解。方法:dp,令dp[i][j][k]表示,第k个放置重量为i,比对面重了j,那么他就可以被dp[t][i-j][k-1]转移到,即当前放i重了j,那么上一个一定比上上一个重了i-j,枚举t即可。 #include<iostr...原创 2019-09-26 15:04:38 · 119 阅读 · 0 评论 -
Educational Codeforces Round 6 E. New Year Tree
题意给出一个有根树,给出m个操作,操作1表示使得这一棵树的某一个节点的所有子树染上某一种颜色,操作2表示查询这个节点及其子树的颜色数量。思路对于一颗有根树来说,我们依靠dfs序就可以变换成为一个有序的序列,所以根据dfs序可以建立线段树。对于线段树的操作,更新的话,区间更新,推lazy标记,问题是怎么去统计颜色的数量,这也关系到我们将怎么去推lazy标记。如果单纯的修改,变换tree[r...原创 2019-09-22 11:31:10 · 78 阅读 · 0 评论 -
cf-877e Danil and a Part-time Job
题意所有房间成一棵有根树,房间1为根节点,每一次pow操作要求把当前节点在内的,以及他的子树全部反转一遍即1变成0,0变成1。每一次get操作进行求和,算出该节点在内的和他子树所有房间为1的个数即求和。方法:dfs序建线段树,用模板进行修改一下即可。区间反转问题还是一样,要对该区间操作为奇数才进行反转偶数次操作无效,也就对应了lazy标记该怎么推。先初始化线段树然后每一次如果是有效操作,那么s...原创 2019-09-19 21:20:35 · 124 阅读 · 0 评论