
ACM_图论
文章平均质量分 76
茗_ming
这个作者很懒,什么都没留下…
展开
-
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 · 418 阅读 · 0 评论 -
POJ 2240 最短路
最短路 找环路积大于1的 用bellman做的 #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double PI = acos(-1原创 2013-08-17 23:07:53 · 375 阅读 · 0 评论 -
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 · 517 阅读 · 0 评论 -
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 · 444 阅读 · 0 评论 -
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 · 503 阅读 · 0 评论 -
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 · 421 阅读 · 0 评论 -
POJ 3469 最小割
两个CPU为原点和汇点,每个任务为一个顶点,在两个CPU上的花费分别连边,不能共享资源的额外花费连无向边构图的解释。。虽然还是有点不理解这样,该图的最小割中,原点和模块节点之间的边,或者模块节点与汇点之间的边至少一条在割之中。同时,如果数据交换的结点选择了不同的核,那么他们之间的中边一定也在割集中 (如果不在,那么可以构造出更小的割)。如果选择了相同的核,那么模块节点之间的那原创 2013-09-06 15:31:17 · 489 阅读 · 0 评论 -
POJ 1637 || ZOJ 1992 混合图欧拉回路 最大流
题意是混合图是否有欧拉回路引用一下别人的题解。。混合图欧拉回路用的是网络流。把该图的无向边随便定向,计算每个点的入度和出度。如果有某个点出入度之差为奇数,那么肯定不存在欧拉回路。因为欧拉回路要求每点入度 = 出度,也就是总度数为偶数,存在奇数度点必不能有欧拉回路。现在每个点入度和出度之差均为偶数。将这个偶数除以2,得x。即是说,对于每一个点,只要将x条边反向(入>出就是变入,出>入原创 2013-09-06 14:40:04 · 533 阅读 · 0 评论 -
POJ 1815 最小割 拆点 枚举
求一个最小割点集,拆点,连一条自己出点到入点的容量为1的边,s,t连无穷边,保证不被割集割到,然后从1到N枚举删除点,求最小割,如果求得的最小割变小,则更新最小割,并且将该点记为删除,以后枚举的是偶构图不考虑该点,然后记录答案要注意0的时候不要输出序列的那一行#include #include #include #include #include #include #inclu原创 2013-09-09 21:30:28 · 633 阅读 · 0 评论 -
ZOJ 2788 最小割
虽然是自己做出来的,不过为什么这么构图感觉说不清,别人的解法写的挺好的.解法:显然这是一个集合的分割问题,即求这样的一个割:使得终点房间与某些存在人的房间的一个分割,题中求的最少的人就是求解一个最小割。将问题转化为网络流求解。通过建立从超级源点到存在人的一些房间,那么从汇点反向遍历寻找这样的一个割。如果从源点到有人房间的边满流,那么反向遍历一定不会将这个节点划分到汇点集合里面去,如果该边不满流原创 2013-09-10 16:21:37 · 447 阅读 · 0 评论 -
最小割的一些理解
一、基本问题: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 · 986 阅读 · 0 评论 -
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 · 651 阅读 · 0 评论 -
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 · 377 阅读 · 0 评论 -
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 · 473 阅读 · 0 评论 -
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 · 382 阅读 · 0 评论 -
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 · 411 阅读 · 0 评论 -
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 · 501 阅读 · 0 评论 -
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 · 1062 阅读 · 0 评论 -
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 · 465 阅读 · 0 评论 -
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 · 599 阅读 · 0 评论 -
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 · 456 阅读 · 0 评论 -
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 · 381 阅读 · 0 评论 -
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 · 445 阅读 · 0 评论 -
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 · 415 阅读 · 0 评论 -
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 · 391 阅读 · 0 评论 -
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 · 421 阅读 · 0 评论 -
POJ 1192 限制条件最短路
通道在一定的时间开放,处理一下就是最短路了strtok(char[], " ")还是很好用的引用一下百度百科strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包涵的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的原创 2013-08-18 16:42:29 · 443 阅读 · 0 评论 -
POJ 1087 网络流 最大流
设置源点和汇点,每个需要使用的设备插座,连接源点到该插座的设备个数,连接会场提供插座到汇点,容量为个数,然后连接插座转换边,容量为无穷注意转换插座可能是之前没出现过的#include #include #include #include #include #include #include #include #include #include using namespa原创 2013-09-04 11:52:06 · 419 阅读 · 0 评论