- 博客(53)
- 收藏
- 关注
原创 POJ 1815 最小割 拆点 枚举
求一个最小割点集,拆点,连一条自己出点到入点的容量为1的边,s,t连无穷边,保证不被割集割到,然后从1到N枚举删除点,求最小割,如果求得的最小割变小,则更新最小割,并且将该点记为删除,以后枚举的是偶构图不考虑该点,然后记录答案要注意0的时候不要输出序列的那一行#include #include #include #include #include #include #inclu
2013-09-09 21:30:28 619
原创 POJ 1637 || ZOJ 1992 混合图欧拉回路 最大流
题意是混合图是否有欧拉回路引用一下别人的题解。。混合图欧拉回路用的是网络流。把该图的无向边随便定向,计算每个点的入度和出度。如果有某个点出入度之差为奇数,那么肯定不存在欧拉回路。因为欧拉回路要求每点入度 = 出度,也就是总度数为偶数,存在奇数度点必不能有欧拉回路。现在每个点入度和出度之差均为偶数。将这个偶数除以2,得x。即是说,对于每一个点,只要将x条边反向(入>出就是变入,出>入
2013-09-06 14:40:04 518
转载 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的比较
http://www.iteye.com/topic/614070此少侠总结的特棒,直接收藏了。我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)。这四种树都具备下面几个优势:(1) 都是动态结构。在删除,插入操作的时候,都不需要彻底重建原始的索引树。最多就是执行一定量的旋转,变色操作来有限的改变树的
2013-08-31 21:59:36 522
原创 ZOJ 1456 最短路 输出路径
这题本来觉得比较简单的 可是一直WA 后来看别人解释找到原因了“这题难就难再要字典序输出,要是单单floyd的话,无法保证最后得到的路径字典序最小,一个简单的反例就是如果6 5 7 8 9和6 8 1 2 9以及6 10 1 2 9同时是6-9的最短路的话,如果忽略相等情况下的更新,6 8之间是不会被7作为中间节点而更新的,但是不忽略的话,又可能被中间比较大的节点更新了。所以直接floyd(采
2013-08-18 00:22:38 501
原创 ZOJ 2725 SG函数 DP
给一个长度为6的有前导零的数字,每次可以使一位减少,最少减少1,最多减少到0,也可以在0右边的数字和0本身都删除,两人轮流操作,问先手是否必胜一开始看错题,写了半天都不对,一种是SG函数的,发现SG函数vis数组范围是SG的选择,另一种是顺推的DP,DP要快很多SG函数 1680ms#include #include #include #include #include #i
2013-08-16 23:29:14 459
原创 POJ 2318 2398 计算几何
求叉积根据叉积的正负,判断点在哪两个线段之间,二分即可#include #include struct Point{ int x, y; Point(int a = 0, int b = 0) { x = a; y = b; }};Point tp[5555], bt[5555];int cnt[5555];int n;
2013-10-03 21:21:34 437
原创 ZOJ 3022 数学题
将对几个的概率记录下来,然后依次递推#include #include int n;double dp[2][20];void solve(){ char str[20]; memset(dp, 0, sizeof(dp)); int i, j, k, wc, kc; wc = kc = 0; dp[0][n] = 1; int
2013-10-03 19:02:23 600
原创 POJ 2443 位压缩加速
转化为01矩阵,将30行的每一列合并成一个int,对于某个询问进行与运算#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI
2013-09-27 15:14:50 572
原创 HDU 4749 KMP + BIT HASH
求串A和串B偏序匹配的所有位置。偏序匹配就是保持大小关系的离散化后两个串一模一样。1≤|A|,|B|≤10 5 ,1≤A i ,B i ≤25 昨天网络赛的B题,我们当时随便弄了个 25∗(|A|+|B|) 的hash就过了,后来在Vani那听说有n lg k(k为字符集大小)的做法,想了一下总算明白了。记录一下。其实满足以下两条性质的匹配关系都能KMP:
2013-09-25 20:50:27 561
原创 2013 成都网络赛
最后四题C题没什么说的,J题区间统计一下就行,D题一开始推前几项没找到规律就一直放弃着,到后来又回头来找,浪费了不少时间,还是缺少做题的感觉,G题数位dp,注意可以静态求解,一开始TLE.
2013-09-14 20:35:23 560
原创 HDOJ 4717 三分法
两个点列式展开后发现距离的平方是二次函数, 之中取最大值仍然是个二次函数, 三分法即可#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const doub
2013-09-12 21:55:45 415
原创 2013 成都邀请赛重现
1001 1012水题1007数位dp1005一开始当做求三角形外接圆,后来才发现是最小覆盖园1010直接做SPFA,由于边太多TLE了 重新构图 每一层多加一个点,将每层的点,如果上一层有点,对本层的每一个点连一条到上一层的额外点,边权为C, 下层也是如此,然后每层的额外点连接一条到本层的边权为0的边,上面的边都是有向边.1011枚举开头的组合是否能构成不由0构成的最大的数,
2013-09-12 21:13:46 506
原创 ZOJ 2788 最小割
虽然是自己做出来的,不过为什么这么构图感觉说不清,别人的解法写的挺好的.解法:显然这是一个集合的分割问题,即求这样的一个割:使得终点房间与某些存在人的房间的一个分割,题中求的最少的人就是求解一个最小割。将问题转化为网络流求解。通过建立从超级源点到存在人的一些房间,那么从汇点反向遍历寻找这样的一个割。如果从源点到有人房间的边满流,那么反向遍历一定不会将这个节点划分到汇点集合里面去,如果该边不满流
2013-09-10 16:21:37 437
转载 最小割的一些理解
一、基本问题:1.到底什么是割:原始点集为V,选出一些点集S使得s∈S,T=V-S,t∈T,则S到T的边为S到T割,记做[S,T]。2.什么是最小割:图中所有的割中,边权值和最小的割为最小割!3.割得容量容量和流量计算的区别:割[S,T]的容量为∑(边(u,v)的容量和),其中u∈S,∈T。也就是说割的容量不计算反向的边!!而流量为正向的和反向的代数和。4.最大流-最小割定理:最大
2013-09-10 15:25:51 954
原创 ZOJ 2587 最小割唯一性
判定最小割唯一性,先做一遍最大流,然后正向遍历得到集合S, 反向遍历得到集合T,如果ST不想交切相加等于全集,那么就是唯一的反向遍历是容量取边edge[i^1].cap, 感觉非常巧妙#include #include #include #include #include #include #include #include #include #include usin
2013-09-10 15:25:47 626
原创 Code forces 199 div 2 A B C
写了ABC三个水题..A: 126 136 124 三种组合判断是否够用#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI
2013-09-08 21:01:00 460
原创 POJ 3308 最小割
改成log计算值 将乘法转化为加法#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);templ
2013-09-06 16:04:13 405
原创 POJ 3469 最小割
两个CPU为原点和汇点,每个任务为一个顶点,在两个CPU上的花费分别连边,不能共享资源的额外花费连无向边构图的解释。。虽然还是有点不理解这样,该图的最小割中,原点和模块节点之间的边,或者模块节点与汇点之间的边至少一条在割之中。同时,如果数据交换的结点选择了不同的核,那么他们之间的中边一定也在割集中 (如果不在,那么可以构造出更小的割)。如果选择了相同的核,那么模块节点之间的那
2013-09-06 15:31:17 477
原创 POJ 2391 网络流最大流
首先想到floyd,然后二分最大距离加边,但是会有问题 如果1->3 距离110 1->2距离40 2 ->3距离70 ,当最大距离是70时1->3仍然可走,所以需要拆点.把每个点拆成一个来源一个去向然后来源和去向连一条无穷的边 #include #include #include #include #include #include #include #include
2013-09-04 14:53:41 367
原创 POJ 1087 网络流 最大流
设置源点和汇点,每个需要使用的设备插座,连接源点到该插座的设备个数,连接会场提供插座到汇点,容量为个数,然后连接插座转换边,容量为无穷注意转换插座可能是之前没出现过的#include #include #include #include #include #include #include #include #include #include using namespa
2013-09-04 11:52:06 402
原创 POJ 2513 欧拉路判定
用Trie树记录单词,然后再用度数判定#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);tem
2013-08-31 14:26:47 487
原创 ZOJ 2016 欧拉路判定
判定联通 出度入度即可#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);template inline T MAX(T a, T
2013-08-31 12:09:36 433
原创 ZOJ 3508 贪心
士兵按照右边界从小到大排序,然后依次寻找武器中最小的满足区间的#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);template i
2013-08-26 15:11:17 393
原创 POJ 3169 差分约束
只要建立成d[u] 图不连通输出-2有负环输出-1#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-
2013-08-19 21:48:45 371
原创 POJ 1364 差分约束
判断差分约束是否存在#include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);template inline T MA
2013-08-19 19:07:02 440
原创 ZOJ 1508 差分约束
差分约数 找最短路 以终点为原点相邻最多加1 将每条边 u v w 构造为 v 到 u-1 权值为-wSPFA#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double P
2013-08-19 18:30:12 450
原创 ZOJ 1857 最短路
输入有点坑,最后一个case没有空行#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);template inline T MAX(
2013-08-19 16:38:48 403
原创 ZOJ 1221 最短路
floyd#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);template inline T MAX(T a, T b){if
2013-08-19 16:08:42 577
原创 ZOJ 1082 最短路
floyd 即可#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);template inline T MAX(T a, T b){
2013-08-19 15:54:11 449
原创 ZOJ 2797 最短路
最短路的修改变成概率相乘即可SPFA#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);template inline T MA
2013-08-19 15:42:51 1045
原创 ZOJ 2027 最短路
保存一下路上最大值,在更新的条件中也改成路径和减去最大值即可SPFA#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI =
2013-08-19 15:28:59 488
原创 POJ 2253 floyd 最短路
本想二分答案,后来发现只要修改floyd方程即可#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);template inline
2013-08-18 23:44:50 397
原创 POJ 2263 最短路 路径上最小值
修改floydmp[i][j] = MAX(mp[i][j], MIN(mp[i][k], mp[k][j]));#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long lon
2013-08-18 23:38:05 409
原创 POJ 2570 floyd 二进制
将最短路条件改成mp[i][j] = mp[i][j] | (mp[i][k] & mp[k][j]);#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;c
2013-08-18 23:16:54 379
原创 ZOJ 3088 最短路 最长路
做一个最短路 一个最长路,枚举两点求比值最大的记录,然后最后输出就行#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = a
2013-08-18 22:56:50 463
原创 POJ 3259 最短路 判负环
SPFA 判负环 某个点访问n次#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);templa
2013-08-18 18:15:05 409
原创 POJ 3268 最短路
建反向边 做两遍SPFA#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1.0);template
2013-08-18 17:44:23 367
原创 POJ 1192 限制条件最短路
通道在一定的时间开放,处理一下就是最短路了strtok(char[], " ")还是很好用的引用一下百度百科strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包涵的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的
2013-08-18 16:42:29 437
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人