进阶图论
最短路,最小生成树,欧拉路径,二分图匹配,网络流等
蒋卫升
这个作者很懒,什么都没留下…
展开
-
Data Center Drama (欧拉回路)
题目链接题意:给你一张n个点m条边的联通无向图,现在你需要将每一条边确定一个方向,使得每个点的出度和入度都为偶数。初始给定的图不一定有解,你需要给这张图加上尽可能少的边,使得新图有解,并输出一个方案。思路:欧拉回路的性质之一是所有的点的度都是偶数,那么这题就转换成求欧拉回路。那么如何保证出度入度都为偶数呢?在输出欧拉回路的时候,一正一反的输出即可,这题需要注意的是欧拉回路有可能出现自环的...原创 2020-01-13 10:18:29 · 266 阅读 · 0 评论 -
洛谷 P4014 分配问题 (费用流解决二分图最优匹配)
link思路:用矩阵的行列建图,跑费用流即可,存个板子#include <bits/stdc++.h>#define ll long long#define pi pair<int,int>#define mk make_pair#define pb push_backusing namespace std;const int maxn = 10005;const int maxm = 1000005;const int inf = 0x3f3f3f3f;s原创 2020-07-07 11:29:36 · 264 阅读 · 0 评论 -
洛谷 P2756 飞行员配对方案问题(最大流求二分图最大匹配)
link题目:求二分图最大匹配思路:二分图最大匹配有匈牙利算法,但是也能用网络流求解。我们设置二分图左边的点集为A,设置二分图右边的点集为B,我们从A到B连一条有向边,边权为1,我们设置一个超级源和一个超级汇点。超级源连有向边到A集,B集连有向边到超级汇。用dinic算法求出最大流,最大流就是最大匹配,匹配边就是正向边中流量不为0的边。code:#include <bits/stdc++.h>#define ll long long#define pi pair<int,int原创 2020-07-05 17:44:14 · 215 阅读 · 0 评论 -
UVA 11248 Frequency Hopping (最大流模板)
题意:给定一个网络,每条边都有一个容量,问是否存在1到n的流量为c的流。如果存在,输出possible,如果不存在,是否可以通过修改一条这样的边的容量,使得存在这样的流?如果有若干个答案,排序后输出。题解:求出最大流,如果大于等于c,就存在,否则,算出最小割,如果,把最小割中的流量增加到c,再求最大流,如果此时的最大流满足大于c,保存答案。因为这样写会超时,所以用到白书给的两个优化。code:#include<cstdio>#include<cstring>#include原创 2020-07-05 16:49:11 · 184 阅读 · 0 评论 -
cf #599 (Div. 2) D 0-1 MST
题目链接题意:给你一个图,有n个节点,m条边,如果两个节点之间有边,则边权值为1,否则这两个节点之间的边权值为0。求这个图的最小生成树的边权值的和。思路:求这个图的逆向图的联通块的个数,答案就是个数减1,因为n个联通块只需要n-1条线段就可以变成一个联通块,而对于每个联通块来说,任意两点的边权都是0,可以默认看成一棵树。如何求出联通块的个数,用一个set-s保存每个节点的编号,set-G...原创 2019-11-09 00:03:14 · 168 阅读 · 0 评论 -
path
题目链接题意:给你一张有向加权图,n个节点,m条边,有Q次查询xi,输出图中,第xi小的路的权值。思路:用vector<pi>保存每个点出度所连着的点和边权值,用一个改变优先级的优先队列保存:以u为终点,走过的路的权值和。对于Q次查询,我们找出最大的xi,记为mx,求出第1-第mx大的所有路径保存在ans中。如何求?取出优先队列的top(当前最短路径),枚举终点出度所连的信息...原创 2020-01-10 16:14:35 · 119 阅读 · 0 评论