图论
acInfinity
CS
展开
-
LA 3661
LA 3661题意是给出一张网格图,每个点都延伸出横边,竖边,斜边,每条边都有一条权值,要求左上角到右下角的道路被隔断,问最小割。 对于最小割的题目,很自然地想到网络流,但此题n的范围并不小,用网络流效率不高。针对本题的特点,我们可以将该图进行转化,转化成其对偶图,然后在对偶图上求最短路即是原图的最小割。 如何进行对偶图转化?原图中的面—>新图中的点,对于原图中的每一条边e,属于两个面f1,f2原创 2017-03-01 13:54:44 · 282 阅读 · 0 评论 -
51nod 1307
题意:给出一棵树,每条边上都有一个权值,每个点也有一个权值,当一条边的子树所有节点权值和超过这条边的权值时,这条边会断开。边按序给出,问最多能有几条边。 每条边的可承受重量可以看成其下端点的可承受重量。 数据比较弱,首先可以按题意模拟,当加入一个新点时,向上不断查找父节点,查看新点到根节点的这条路径是否有边会超限断开。#include<cstdio> #include<cstring> #inc原创 2017-07-05 23:57:18 · 245 阅读 · 0 评论 -
Uva 10972
Uva 10972题意是给一个无向图,要求将所有边改为有向边,求还需要添加多少有向边才能使其强连通。 寻找边双联通分量,先深搜一次,标记所有桥,再深搜一次,不经过桥,找出所有边双联通分量,之后建新图,把一个联通分量看做一个点,计算所有点的度数,度数小于2的点需要将度数提升至2才能保证强连通。因此ans=(∑(2-deg[i])+1)/2,(deg[i]<2)。 当边双联通分量只有一个时,原图已经原创 2017-03-14 17:24:54 · 418 阅读 · 0 评论 -
LA 3514
LA 3514题意是给一个无向图,若它是仙人掌,则求出它有多少生成子图(包括自身)是仙人掌,否则输出0。仙人掌被定义为每条边最多在一个简单回路上的连通无向图。 关于Cactus问题,这里有篇08年国家集训队周冬的论文,比较详细地总结了所有的仙人掌问题。 以下是AC代码:#include<vector> #include<cstdio> #include<cstring> #include<ios原创 2017-03-14 13:40:31 · 742 阅读 · 0 评论 -
LA 3887
给出一个无向简单图,要求求出最大边减最小边的差值最小生成树。 鉴于n<=100,那么枚举最小边,并用Kruskal算法构造最小瓶颈树即可。因为Kruskal算法是在构造生成树时保证最大边最小。复杂度O(n*m)。#include<bits/stdc++.h> using namespace std; #define debug puts("Infinity is awesome!") #defin原创 2017-03-22 15:32:47 · 409 阅读 · 0 评论 -
Uva 10600
给出一个无向图,要求求出最小的两个生成树。 难么即是求出最小生成树和次小生成树。 次小生成树的求解过程是,先求解最小生成树,再在树上深搜,处理出maxcost[u][v],表示树上u到v的路径上最大的边。然后枚举不在树上的边(i,j),去替换树上的i到j最大的边,求最小即是次小生成树。 #include<bits/stdc++.h> using namespace std; #define d原创 2017-03-22 16:40:24 · 422 阅读 · 0 评论 -
LA 4043
LA 4043最佳完美匹配,懒得写东西。 这个博主写得极好-> http://www.cnblogs.com/wenruo/p/5264235.html 直接套模板即可。转载 2017-03-04 23:33:09 · 420 阅读 · 0 评论 -
LA 3989
Stable Marriage Problem and Propose-and-reject algorithm有n位男士,n位女士,每个人对于每个异性都有一个排序,表示对他(她)的喜欢程度。现在要求他们两两(异性)组成稳定的关系,对于稳定的关系定义如下,不存在任何一对男女,他们对对方的喜欢程度都大于他们当前的伴侣。 以上,便是Stable Marriage Problem的定义。 对于稳定婚姻原创 2017-03-08 01:34:47 · 314 阅读 · 0 评论 -
Uva 11354
Uva 11354题意是给出n个点,m条边的图,并有q个询问(s,t),输出s到t的最右路径下的最大边权值。 用Kruskal先求出最小瓶颈生成树,并深搜将其转化为有根树,并在同时记录下每个点的深度和父结点。计算出anc[i][j]以及maxcost[i][j],分别表示i的第2^j级祖先,i到其第2^j级祖先的最长边长度,j=0时表示父节点。 那么存在递推关系anc[i][j]=anc[anc原创 2017-03-03 00:24:29 · 678 阅读 · 0 评论 -
LA 5713
LA 5713要求A/B最大,那我们先保证B最小,然后枚举A。先求出最小生成树,并在树上深搜,记录下maxcost[u][v],即树上点u到点v之间的最长的边。 再枚举A,即枚举法术边的两个端点i和j,删去树中i到j路径上的最长边,加入用法术边(i,j)。此时最小生成树权值变成了sum-maxcost[i][j]。 求出min((W[i]+W[j])/(sum-maxcost[i][j]))即可原创 2017-03-02 20:03:45 · 665 阅读 · 0 评论 -
51nod 1326
原题链接 road(0,n-1)=road(0, n-1的邻接点x)+edge(x,n-1)*2*k 构成!选取mod,mod=min( edge(x, n-1) )。 SPFA跑一遍,求出G[u][d], G[u][d]表示从0出发到达u的路径长度%mod=d的最短路径。 跑完之后, 枚举n-1的邻接点,再枚举d,看能否构造出T。#include<set> #include<map> #原创 2017-10-17 17:55:22 · 239 阅读 · 0 评论