随笔分类 - 算法题&leetcode
摘要:title: WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS date: 2020-03-20 10:43:00 categories: acm tags: [acm,woj,图论] 用到了树的 直径 1 描述 Tom is an explorer and n
阅读全文
摘要:思路: 比如5 2 12345--> 1245 从3开始,这时候5变成了1.剩下4512,对应1234.只需要找到现在n-1,k中的数对应原来的编号的映射。 比如1-->3 是1+2 mod 5,4-->1是4+2 mod 5. //大雾 应该是4还原成1,4+k+1(3) mod 5=1 , 1还
阅读全文
摘要:这类问题有一个通法 https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/solution/yi-ge-tong-yong-fang-fa-tuan-mie-6-dao-gu-piao-wen/ 类似的题目有122
阅读全文
摘要:类似于紫书例题8-7. 用滑动窗口。 class Solution { public: int lengthOfLongestSubstring(string s) { set<char>ss; int left=0,right=0,ans=0; while(right<s.length()) {
阅读全文
摘要:最小值最大,就二分判断。 map[i] = '0'+map[i];这样更方便 每个点拆成i,i’, S连i,cap为a[i],i’连T,cap为1(保证至少剩一个)或mid。 i,i’ ,a[i] i->j’, inf //把i连到j就WA了...所以题目的意思大概是只能移动到相邻点? 判断一下bo
阅读全文
摘要:init 一开始搞成2*n+2了...囧 所以初始化很重要! 然后提交的时候忘了删调试的数据了。。囧 技巧:设立虚拟节点 建图比较麻烦(非常)。 要考虑到保养完了的车可以免费再用 设立S,T ,1-N, N+1-2N S连1-N,cap为ri,cost为0,表示用了的还没维护的车,还要链i,i+1
阅读全文
摘要:点连通度:最少删除几个点使图不连通 拆点就变成了最小割 注意编号。画图就知道u’连v,v’连u。 技巧:不需要枚举S,T。固定S,枚举T即可 这种输入很烦, scanf(" (%d,%d)", &u, &v); Scanf中添加 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或
阅读全文
摘要:题外话:很多混合图问题可以转化为有向图问题(将无向边拆为两条有向边) 本题不行,因为只能经过一次 这种问题能想到网络流。。 复习欧拉回路:入度==出度 和uva1380有点相似,要先给无向边定向。原图为G,定向的边单独组成另一个G’ 定向后对任意点,入度==出度,则有了回路。 否则调整原来的无向边。
阅读全文
摘要:这里就想到了lrj说的理解EK但是使用Dinic 因为图较大,所以采用Dinic而不是EdmondsKarp 得益于接口一致性,无须理解Dinic就能使用它。 看到最小费用,又有隔开的操作(割),就是最小割,就想到了最大流(想了想用不到MCMF,这里挺需要注意的,所有网络流的题首先判断是MCMF还是
阅读全文
摘要:证明: 对于每一个X节点,都是只有一个入流,多个出流(分别流向每一个Y节点),显然多个出流的和正好等于入流;同理,对于每一个Y节点,有多个入流(分别来自每一个X节点),只有一个出流,显然多个入流的和等于出流。第一类弧,以每一行所有元素之和为容量;第三类弧,以每一列所有元素之和为容量;第二类弧,最终流
阅读全文
摘要:拆点法是很套路的方法,将一个点拆为i和i',连边,cap为1,cost为0. 编号:点2~n-1拆成弧i->i',前者编号为0~n-1,后者编号为n~2n-3 (i+n-2) 本题拆点后从1-v求流量为2的最小费用流 while(flow < flow_limit && BellmanFord(s,
阅读全文
摘要:网络流的问题一般都会加S,T! 网络流init参数一般为节点数(包括S,T) maxn为点数+一点(注意可能加点,拆点...) 把插头看做结点,增加S,T链接设备和插头(容量为1),转换器作为边(容量无穷大),套模板。用的是紫书第二种方法,因为更喜欢思维直接一点的方式。 读取输入时用一个ID函数方便
阅读全文
摘要:白书第一章例题4 思维。 先固定一点不动,假设最后一共N个点,那么编号为0,1,...N-1, 0不动,原来的n个点分别占据i/n*N的位置(记为pos),移动到pos四舍五入的位置即可。 证明一:有一个坐标未移动,见例题3(UVA11300) 证明二:没有点移动到相同位置。 假设x,y移动到相同位
阅读全文
摘要:白书第一章例题6 构造。思维。几何。 分别从几个角度去看,有矛盾就删掉,最后遍历一下统计个数 方法证明:第一个方块肯定要删除。假设前k个必须删除,第k+1个矛盾出现,假如不删掉,矛盾将持续存在,故必须删掉。 代码有很多细节。 比如注意宏定义加() //#define REP(i,n) for(int
阅读全文
摘要:白书第一章例题7 很套路了。枚举第一行,可以直接算出之后的几行。 #include <iostream> using namespace std; #include <stdio.h> #include <cstring> #define INF 10000000 int grid[20][20];
阅读全文
摘要:白书第一章例题8 好麻烦! 正方体每面编号为0-5,那么根据顶点和正面,就能确定形态。一共6*4=24种形态。 P[i]表示编号i所在位置。比如P[1]=3,表示第二面转到了第四面。 就可以表示出所有形态。 这时候可以手算或者写个函数找出所有形态。 注意选择函数计算,要放到main外面,方便调。 注
阅读全文
摘要:习题9-9 注意前提是最小值最大。很少做两次dp的题。 初始化要细心。
阅读全文
摘要:状压dp 要再看看 例题9-17
阅读全文
摘要:最短路算法的复杂度考虑 书上已经做了优化,用的是优先队列;用优先队列实现堆优化 V为点集,E为边集 从O(V^2)优化到O(ElogV) 然后再记忆一下inf 0x3f3f3f3f的十进制是1061109567,是10^9级别的而一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用而不致出现
阅读全文