Day1:T3 bfs T4 树形DP】的更多相关文章

T3:BFS 回看了一下Day1的T3...感觉裸裸的BFS,自己当时居然没有看出来... 同时用上升和下降两种状态bfs即可 这一题还要注意一个细节的地方,就是题目要求的是求往返的最优解 k=min(d[上升],d[下降]); ans=min(2*k+1,d1[]+d2[]); 输出ans..这个地方需要理解: 以及如果这个点在边缘地区(边界) 且这个点的高度为0 那么就不需要转化 其余的照bfs模板打即可: //刚开始以为是把每一个点都bfs一遍,看了标程之后发现有一个优很多的解法: 把出发…
题目描述 喜欢数学的wlswls最近被萎住了. 现在他一共有1...n1...n这么多数字,取数字ii会得到f[i]f[i]的收益.数字之间有些边,对于所有的i(i != 1)i(i!=1),若ii为奇数,则ii与3i+13i+1之间有边,否则ii与i/2i/2之间有边.如果一条边的两个顶点xyxy都被取了,那么会失去d[min(x, y)]d[min(x,y)]的价值.请问wlswls怎么取,才能使得收益最大?     输入描述 第一行一个整数nn. 接下来一行nn个整数表示ff. 接下来一行…
题意:一棵有N个结点的树,每个节点上有权值c[i] 需要选出若干结点,对于任意结点他的所有祖先都被选取且选取总个数不能超过lim 在此前提下使权值和最大 n,lim<=3000 思路:WA了1次才过真是傻 f[i,j]表示选取I为根,取J个结点的最大值 用类似背包的转移,注意dp[u,i]I不能取0,因为U必取 ..,..]of longint; c:..]of longint; head,vet,next,flag,de:..]of longint; n,lim,tot,i,j,ans,x,y…
IOI2008/BZOJ1791 岛屿 题目大意是在一个基环树森林里求每一棵基环树的直径①的和. 其实就是树的直径的基环树升级版.我们先把环找出来,然后从环上的每一个节点x出发,并且不经过环上其他节点,做一次树形DP,求出x的子树中到x最远的路径长d[x]和x的子树的直径dp[x]. 那么基环树的直径只有两种情况: 1.直径不经过环上的节点 对于每一个dp[x]取max就好了. 2.直径经过环上的节点 对于任意环上的两个节点x和y,都可以构成一条路径d[x]+d[y]+dist(x,y),其中d…
题意:告诉一张带权图,不存在环,存下每个点能够到的最大的距离,就是一个长度为n的序列,然后求出最大值-最小值不大于Q的最长子序列的长度. 做法1:两步,第一步是根据图计算出这个序列,大姐头用了树形DP(并不懂DP),然后就是求子序列长度,其实完全可以用RMQ爆,但是大姐头觉得会超时,于是就采用维护最大,最小值(差超过Q的时候就删掉,然后记录长度). 做法2:通过3次bfs求树的直径(为什么啊),然后RMQ求出所有区间的最大最小值 时间复杂度:290ms #include <cstdio> #i…
题目背景 NOIP2016 提高组 Day1 T3 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程安排在 n 个时间段上.在第 i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 ci 上课,而另一节课程在教室 di 进行. 在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的 n 节安排好的课程.如果学生想更换第 i 节课程的教室,则需要提出申请.若申请通过,学…
题目描述 一条单向的铁路线上,依次有编号为 1,2,…,n 的 n个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x ,则始发站.终点站之间所有级别大于等于火车站 x 的都必须停靠.(注意:起始站和终点站自然也算作事先已知需要停靠的站点) 例如,下表是 5 趟车次的运行情况.其中,前 4 趟车次均满足要求,而第 5 趟车次由于停靠了 3 号火车站( 2 级)却未停靠途经的 6 号火车站(亦为 2 级)而不满足要求.…
树形dp专题总结 大力dp的练习与晋升 原题均可以在网址上找到 技巧总结 1.换根大法 2.状态定义应只考虑考虑影响的关系 3.数据结构与dp的合理结合(T11) 4.抽直径解决求最长链的许多类问题(T12) 5.dp题最基本的考察是对题意模型的转化,以应用在各个方面 6.前缀和等技巧优化dp 7.树形背包是n*n的! T1 BZOJ1304 [CQOI2009]叶子的染色 首先是对于固定根节点的\(dp\) \(dp\)状态\(dp[3]\)为子树还需要颜色\(1,2\),或不需要 转移比较简…
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 659  Solved: 469[Submit][Status][Discuss] Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample Input 1122002010 Sample Output 5 2 HINT…
一看到这道题觉得很水,打了递归树形DP后RE了一组,后来发现必须非递归(BFS) 递归版本84分: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ],next[],v[],c[],cnt=,f[]; ]; ; void insect(int x,int y,int z){next[cnt]=point[x];point[x]=cnt;v[cnt]=y;c[cnt]=…