11 2019 档案
摘要:. 1 #include <cstring> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cmath> 6 #include <vector> 7 using namespace std; 8
阅读全文
摘要:树链剖分详解(洛谷模板 P3384) 洛谷·[模板]树链剖分 写在前面 首先,在学树链剖分之前最好先把 LCA、树形DP、DFS序 这三个知识点学了emm还有必备的 链式前向星、线段树 也要先学了。 如果这三个知识点没掌握好的话,树链剖分难以理解也是当然的。 树链剖分 树链剖分 就是对一棵树分成几条
阅读全文
摘要:该题题意:在规定的地图里放大炮,大炮放的位置有限制,只有‘p’的位置能放; 并且在该点的四周两格内不能再放,找出能放大炮的最大数; 1 /*这道题跟前面做过的一道种植的题相似, 2 不过种植的那道题只会影响上下左右四个点, 3 这道题影响了8个点,所以要多一重l-2的判断; 4 */ 5 #incl
阅读全文
摘要:这是一道最短路+状压的题; 详细注释都在代码里。 题意:输入一个数n,现在有n个地方(标号1到n)要从标号为0的地方出去,经过所有的地方之后回来,求最短的时间 输入(n+1)*(n+1)的矩阵表示每两点之间到达所需要的时间。 d[i][j]表示从i-1到j-1的时间; dp[i][j]=min(dp
阅读全文
摘要:. 1 /*本题为状态压缩题 2 题目大意 : 3 一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧, 4 可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方 5 格不能同时放牛(不包括斜着的),即牛与牛不能相邻。问有多少种放牛方 6 案(一头牛都不放也是一种方案); 7
阅读全文
摘要:题意: 将含有N个元素的一个集合分成M个子集,使得每个子集的最大值与最小值平方差的和最小。 可以想到贪心将元素从小到大排序,很快可以得出dp[i][j]-前i个子集分j个元素的最小花费,dp方程 dp[i][j]=dp[i-1][k]+(a[j]-a[k+1]);但是需要三重循环,时间复杂度接受不了
阅读全文
摘要:斜率优化DP 两步骤; 1.造出DP方程; 2.通过DP方程构造出一个斜率优化方程; 具体怎么构造呢? 如 两个点 a b; 构造出 DP(a)<DP(b) 然后通过这一式子,构造出一个下凸包(后面的边的斜率大于前面的边) 只有下凸包的点是可能作为状态转移方程的转移点,其他点都不可能。 然后,构造完
阅读全文
摘要:题意:一个数,如果满足奇数的数字出现偶数次,偶数的数字出现奇数次, 就是符合的数,注比如:12313 就满足,因为1 3出现了偶数次。2出现了奇数次 思路,对于这道题,就是状态压缩加dp; 对于一个数字来说,0~9每一位,都只有3种状态量,要么从未出现,要么出现次数为奇 要么为偶,所以可以用3进制来
阅读全文
摘要:数位DP的问法是从某个数到某个数的区间里,求出满足题目要求的个数; 如本题所说的不要62和4,就是求出这个区间内,满足这一条件的数; 比如问 6 199的这个区间内满足条件的数,那么就求出1到199满足的数减去1到(6-1)满足的数即可; 那么 具体怎么从操作呢? 首先,我们先求出这个数的a[]数组
阅读全文
摘要:判断方面,没有了割点的root的特判,并且==号去掉 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int maxn=1
阅读全文
摘要:. 1 #include<bits/stdc++.h> 2 #define mp(i,j) make_pair(i,j) 3 #define P pair<int,int> 4 using namespace std; 5 const int inf=0x3f3f3f3f; 6 const int
阅读全文
摘要:1 //拓扑排序判断是否有环 2 #include<cstdio> 3 #include<algorithm> 4 #include<string.h> 5 #include<math.h> 6 #include<queue> 7 using namespace std; 8 typedef lon
阅读全文
摘要:Fibonacci数列的递推公式为 : f[n]=f[n-1]+f[n-1] f[1]=1 f[2]=1 矩阵形式的递推公式为: 即 1 //通过矩阵快速幂来计算快速计算斐波那契额数列的步骤为 2 //初始化单位矩阵,根据式子求出A.a[][](本题为通过f[n]=f[n-1]+f[n-2]) 3
阅读全文
摘要:https://codeforces.com/contest/1243/problem/D 总结 :题目求的就是补图的连通块-1。首先可以把1~n个点都存放到set的s中。当某个点没有被访问过的时候,就调用bfs函数,从s中删除,因为这个点已经访问了,并且加入到队列中。寻找在补图中和这个点相连的,遍
阅读全文
摘要:int类型 1 int Read() 2 { 3 int fu=1,ret=0; 4 char c=getchar(); 5 while(c<'0'||c>'9') 6 { 7 if(c=='-') 8 fu=-1; 9 c=getchar(); 10 } 11 while(c>='0'&&c<='
阅读全文
摘要:这道题跟求最大流的时候差不多。 都是先构造可行流,然后判断是否可行, 可行的话,就利用残余流量,构造从汇点t跑到源点s的最大流, 如何求出答案呢。 在第一次求可行流的dinic后,跟求最大流的时候一样,从t到s是可行流的流量; 这个时候t到s的反向边,也就是s到t的流量就是t到s流的量(因为t到s定
阅读全文
摘要:题意:现在的网络有一个源点s和汇点t,求出一个流使得源点的总流出量等于汇点的总流入量,其他的点满足流量守恒,而且每条边的流量满足上界和下界限制. 思路:要满足每一个点的流量守恒,我们可以尝试像无源汇上下界可行流一样,跑一次dinic先构造出这样一个的可行流。在保证他可行的情况下,利用残余流量 从s到
阅读全文
摘要:无源汇有上下界可行流(也就是循环流) 模型:一个网络,求出一个流,使得每条边的流量必须>=Li且<=Hi, 每个点必须满足总流入量=总流出量(流量守恒)(这个流的特点是循环往复,无始无终) 可行流算法的核心是将一个不满足流量守恒的初始流调整成满足流量守恒的流 流量守恒,即每个点的总流入量=总流出量
阅读全文
摘要:// 最小瓶颈路 指两点之间所有路径中最大的边最小的路径//在最小生成树中,最小瓶颈路就是两点之间的最大值; 先给出一个概念,最小生成树一定是最小瓶颈树(注意这里是树),但反过来的话就不一定; 所以,我们可以用最小生成树的知识来解; 在解的时候,我们需要一步一步的将新加进来的点,与原先已经加进来的点
阅读全文
摘要:这道题与模板之间,多了个确定哪个为根的操作; 这道题有技巧,并不需要真正去建立以某个节点为根的树 关于路径的操作,无论以哪个点为根,得出的答案无影响; 关于对子节点进行操作的,有几种情况, 当查询节点刚好是根节点的话,就直接从1开始遍历就好 (因为这道题是以1为根节点) 当查询的节点的孩子或孙子中包
阅读全文
摘要:https://www.cnblogs.com/chinhhh/p/7965433.html#firstt
阅读全文

浙公网安备 33010602011771号