自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 数论模板

#define REP(i, a, b) for(int i = (a); i < (b); i++)#define _for(i, a, b) for(int i = (a); i <= (b); i++) 欧几里德算法(辗转相除法)(1)可以用来求最大公约数和最小公倍数(2)注意题目的数据是否在int内,中间结果有溢出的可能, 根据情况开long long(...

2018-06-28 18:07:29 239

原创 紫书 习题 11-15 UVa 1668 (图论构造法)

参考了http://www.bubuko.com/infodetail-1276416.html首先是逆向思维, 向把每条边看作一条路径, 然后再去合并然后我们讨论怎么样合并时最优的我们讨论当前的点u那么首先直观感受, 因为如果要合并一次, 就需要两条边,所以最多可以合并的不会超过度数(与其相连的边的总权值)的一半。但这只是直观感受, 并不是所有的情况都可以合并的了这么多。当与当前点相连的边中有一...

2018-06-23 15:56:34 299

原创 紫书 习题 11-16 UVa 1669(树形dp)

想了很久, 以为是网络流最大流, 后来建模建不出来, 无奈。后来看了 https://blog.csdn.net/hao_zong_yin/article/details/79441180感觉思路很巧妙。首先题目等价于让每条边经过的次数最多。那么假设一条边点a到点b, 假设以b为根节点的子树中的节点数为pb, 那么剩下的以以b为根节点的子树中的节点数为pa我们假设pa > pb那么从a这边去...

2018-06-23 11:52:20 181

原创 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)

这道题要逆向思维反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较好操作, 如果正着做就要一点一点删除数字, 不好做。我们需要在这个过程中维护联通块的个数, 这里用到了并查集。首先加进去一个数, 联通分量数字先加一, 然后再考虑有没有和其他联通分量相连。从当前位置四个方向枚举, 如果这个数之前已经被选中, 同时不是一个联通分量, 那么也就是说当前这个木块把两个联通分量变成一个联通分量,...

2018-06-23 10:34:24 132

原创 紫书 习题 11-10 UVa 12264 (二分答案+最大流)

书上写的是UVa 12011, 实际上是 12264参考了https://blog.csdn.net/xl2015190026/article/details/51902823这道题就是求出一种最优的移动士兵的方式, 使得与敌方相邻的阵营中最少的士兵最多因为只能在我方的阵营中移动士兵, 所以建模的时候不用加入地方阵营的点。首先因为士兵只能移动一次, 所以把点拆成两个点, 入点和出点。设阵营士兵的人...

2018-06-22 20:44:39 204

原创 紫书 习题 11-9 UVa 12549 (二分图最小点覆盖)

用到了二分图的一些性质, 最大匹配数=最小点覆盖 貌似在白书上有讲还不是很懂, 自己看着别人的博客用网络流写了一遍反正以后学白书应该会系统学二分图的,紫书上没讲深。目前就这样吧。#include<cstdio>#include<vector>#include<cstring>#include<queue>#include<algorit...

2018-06-22 18:31:28 118

原创 紫书 例题 11-13 UVa 10735(混合图的欧拉回路)(最大流)

这道题写了两个多小时……首先讲一下怎么建模我们的目的是让所有点的出度等于入度那么我们可以把点分为两部分, 一部分出度大于入度, 一部分入度大于出度那么显然, 按照书里的思路,将边方向后,就相当于从出度大于入度的运一个流量到入度大于出度的点。紫书 例题 11-13 UVa 10735(混合图的欧拉回路)(最大流)所以我们可以把源点S到所有出度大于入度的点连一条弧, 弧的容量是出度-入度的一半为什么容...

2018-06-18 15:19:58 221

原创 欧拉回路模板

(1)判断欧拉回路(把所有边走一遍,最后回到起点)无向图的所有点度数为偶数, 且联通有向图的所有点入度=出度, 且联通欧拉道路(把所有边走一遍, 不回到起点)无向图所有点的度数为偶数 或者 除了两个度数为奇数外其余的全是偶数。同时要联通(忽略方向)有向图所有点 出度=入度 或者 一个顶点 出度=入度+1,另一个顶点 入度=出度+1。同时要联通(忽略方向) (2)输出...

2018-06-18 10:23:17 217

原创 拓扑排序模板

bool dfs(int u){ vis[u] = -1; REP(i, 0, g[u].size()) { int v = g[u][i]; if(vis[v] == -1) return false; else if(!vis[v]) dfs(v); } vis[u] = 1; ans[--t] = u; //注意这里倒序加入 return true;}b...

2018-06-18 10:08:06 100

原创 紫书 例题 11-14 UVa 1279 (动点最小生成树)(详细解释)

这道题写了好久……在三维空间里面有动的点, 然后求有几次最小生成树。其实很容易发现, 在最小生成树切换的时候,在这个时候一定有两条边相等,而且等一下更大的那条边在最小生成树中,等一下更小的边不再最小生成树中。这样的话过了这个时刻,等一下更小的边就会代替等一下更大的边, 从而最小生成树切换然后我们讨论怎么实现第一步, 建边因为这里边的长度是随时间变化的, 所以我们可以把其写成一个二次函数。那么显然根...

2018-06-17 16:27:32 252

原创 紫书 例题 11-12 UVa 1515 (最大流最小割)

这道题要分隔草和洞, 然后刘汝佳就想到了“割”(不知道他怎么想的, 反正我没想到)然后就按照这个思路走, 网络流建模然后求最大流最小割。分成两部分, S和草连, 洞和T连外围的草和S连一条无穷大的弧, 表示不能割, 若原来是洞就改成草然后加上花费。然后非外围的草和S连一条容量为把草变成洞花费的弧, T同理。然后相邻的格子之间连容量为围栏的弧。最后是要把草和洞隔开, 所以求最小割就好了。ps:这个建...

2018-06-17 10:40:41 304

原创 紫书 习题 11-8 UVa 1663 (最大流求二分图最大基数匹配)

很奇怪, 看到网上用的都是匈牙利算法求最大基数匹配紫书上压根没讲这个算法, 而是用最大流求的。难道是因为第一个人用匈牙利算法然后其他所有的博客都是看这个博客的吗?很有可能……回归正题。题目中只差一个数字的时候可以匹配, 然后求最少模板数。那么肯定匹配的越多就越少, 也就是求最多匹配多少。这个时候我就想到了二分图最大基数匹配。那么很容易想到可以匹配的一组之间就连一条弧。但问题是怎么分成两类??分类的...

2018-06-16 17:04:37 257

原创 紫书 习题 11-7 UVa 10801 (单源最短路变形)

把每个电梯口看作一个节点, 然后计算边的权值的时候处理一下, 就ok了。#include<cstdio>#include<vector>#include<queue>#include<cmath>#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std...

2018-06-16 14:31:13 147

原创 紫书 习题 11-17 UVa 1670 (图论构造)

一开始要符合题目条件, 那么肯定没有任何一个点是孤立的, 也就是说没有点的度数是1所以我就想让度数是1的叶子节点相互连起来。然后WA然后看这哥们的博客https://blog.csdn.net/trote_w/article/details/79504280原来连叶子的时候, 有三个叶子的时候, 中间的留到下一次连,左右连起来。我之前是直接按照顺序连。按照顺序那么边可能会封闭在一颗子树里面, 比如...

2018-06-16 10:32:22 161

原创 紫书 习题11-11 UVa 1644 (并查集)

这道题感觉思路非常巧妙, 我是看了别人的博客才想明白的。这里用到了并查集, 以根节点为中心城市, 然后把边从大到小排序, 每次的当前的边即为容量,因为是目前的最小值, 然后去算总的容量, 每次选容量大的点作为新的根节点, 也就是新的中心城市。细节见代码。#include<cstdio>#include<algorithm>#define REP(i, a, b) for...

2018-06-14 18:14:00 156

原创 紫书 习题 11-4 UVa 1660 (网络流拆点法)

这道题改了两天……因为这道题和节点有关, 所以就用拆点法解决节点的容量问题。节点拆成两个点, 连一条弧容量为1, 表示只能经过一次。然后图中的弧容量无限。然后求最小割, 即最大流, 即为答案。固定一个源点, 然后枚举汇点, 然后求最小的最小割就ok了。这里的拆点法连边的时候是拆出来的点连上原来的点。同时起点是起点拆出来的点终点是原来的点, 因为这起点和终点是可以经过很多次的。所以总结一下拆点法(解...

2018-06-12 18:50:51 145

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除