图论/数论
FlyuZ
这个作者很懒,什么都没留下…
展开
-
数论基础模板
中国剩余定理//模板int exgcd(int a,int b,int &x,int &y) //扩展欧几里得算法 c = ax + by gcd(a,b)|c{ if(b==0) { x=1; y=0; return a; } int d = exgcd(b,a%b,y,x); y -= a/b*原创 2017-08-08 15:36:25 · 449 阅读 · 0 评论 -
dijkstra队列优化链式前向星(C++、Java)
模板#include <iostream>#include <queue>#include <cstdio>#include <cstring>using namespace std;typedef pair<int, int> pa;const int maxm = 200010; //边const int maxn = 100010; //点const int inf = 0x3原创 2017-10-13 21:40:12 · 1928 阅读 · 0 评论 -
拓扑排序模板--hdu2647
模板:#include <iostream>#include <vector>#include <queue>#include <cstdio>#include <cstring>using namespace std;const int maxn = 1005; //最大边数int n; //点数vector<int> edge[maxn]; //邻接表queue<int> q;原创 2017-10-10 22:12:48 · 370 阅读 · 0 评论 -
hdu3440--SPFA建图
题意: 要从高度最低的地方st跳到高度最高的地方en 每次跳跃最大距离为d。也就是必须经过每一个点,且下一个位置要比当前位置高 。 每个位置都有一个高度值 并且顺序不能换 求st到en的最大距离。 比如说测试样例第一个跳的顺序为 3 -> 1 -> 2 -> 4 st到en的最大距离时的情况: 1 -③- 2 -①- 3 -③- 4 3和4之间最大距离是3建图思路:两个位置原创 2017-10-07 16:26:01 · 302 阅读 · 0 评论 -
乌鲁木齐网赛I-island-tarjan
题目大意:加最少的边使有向图变成强联通图,读懂题意就好办,网赛时通过率很高。 照以前hdu3836的代码改的。#include <iostream>#include <vector>#include <stack>#include <cstring>#include <cstdio>using namespace std;const int MAXN = 20000+10;vector<原创 2017-09-11 17:29:31 · 308 阅读 · 0 评论 -
Our Journey of Dalian Ends (最小费用最大流)
题意: 给定若干个城市,出发点为大连,目的地为西安,要求中途必须经过上海,并且图中每个城市只能经过一次,给出m条路(双向路),走第i条路需要wi代价,求所有满足要求的方案中花费的最小代价,如果没有满足的方案,输出-1。建图思路: 相当于求从大连到上海加上西安到上海花费的代价总和最小。所以就是最小费用最大流,点只可走一次,所以进行拆点,一个入点一个出点,每条路连接至相应的出点到入点,容量为1,花费原创 2017-09-26 21:26:49 · 580 阅读 · 0 评论 -
hdu6214-最小割集中边数最少
感觉题意好迷啊= =,读懂,就知道是模板题了。 求最小割集中边数最少,有两种解法,比赛中我用的第一种,据别人说第二种会超时,没测试过。hdu3987应该是两种都能用的。 第一种: 建边的时候每条边权 w = w * (E + 1) + 1; E为一大数 这样得到最大流 maxflow / (E + 1) ,最少割边数 maxflow % (E + 1)。 第二种: 建图,得到最大流原创 2017-09-18 17:39:36 · 1670 阅读 · 0 评论 -
hdu3605-二分图多重匹配
题意:有N个人,M个星球,每个人有自己想去的星球,每个星球可容纳a[i]个人,问最后能否让每个人都去到自己想去的星球。 题意很好理解,也很容易看出来是多重匹配,就是数据量比较大,直接模板会T。 然后就要用状态压缩来做。匈牙利算法好写不直观,最大流直观但不好写。匈牙利算法:#include <iostream>#include <cstdio>#include <cstring>using n原创 2017-08-30 13:12:22 · 430 阅读 · 0 评论 -
hdu1498二分图最小顶点覆盖
题意:有一个n*n的气球阵,每一次可以将任意一行或一列中相同颜色的气球打破,一共有k次机会,问有哪种颜色的气球不能在k次内全部打破。 气球种类最多有60种。比如说: 4 2 1 2 3 4 1 2 4 3 2 2 1 3 1 4 3 1 这组数据 输出是 1 4。 颜色2 需要2次分别是第一列、第二列 ,颜色3需要2次第三列、第四列。 而颜色1和颜色4不能在2次能全部打破。思路:原创 2017-08-29 17:01:10 · 407 阅读 · 0 评论 -
二分图定理及常见模型
判二分图无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。二分图最大匹配定义:匹配是图中一些边的集合,且集合中任意两条边都没有公共点,所有的匹配中,边数最多的就是最大匹配。如果所有点都是匹配点,则称这个匹配为完美匹配。算法:用匈牙利算法可以在O(V*E)的复杂度内求出二分图的最大匹配。二分图最小顶点覆盖定义:点覆盖是图中一些点的集合,且对于图中所有的边,至少有一个原创 2017-08-29 10:38:52 · 1990 阅读 · 0 评论 -
网络流入门术语定理
容量网络:设G(V,E),是一个有向网络,在V中指定了一个顶点,称为源点(记为Vs),以及另一个顶点,称为汇点(记为Vt);对于每一条弧<u,v>属于E,对应有一个权值c(u,v)>0,称为弧的容量.通常吧这样的有向网络G称为容量网络.弧的流量:通过容量网络G中每条弧<u,v>,上的实际流量(简称流量),记为f(u,v);网络流:所有弧上流量的集合f={f(u,v)},称为该容量网络的一个网络流原创 2017-08-26 16:51:05 · 1329 阅读 · 0 评论 -
hdu4292网络流建图
题目大意: 有N个人, F种食物, D种饮料, 每种食物和饮料的数量有限且已经给出,每个人有自己喜欢的食物和饮料, 问,最多能满足多少人吃到自己喜欢的食物和饮料。建图的想法: 食物饮料数量有限,又要最大满足人数,想到网络流,将食物放到一边, 饮料放到另一边, 人放到中间,因为每个人只能吃一种食物和饮料,所以把人拆成两个点,不然同一个人就可能同时吃很多食物和饮料。 然后左边建一个超级源,右边建一个超级原创 2017-08-27 11:02:29 · 343 阅读 · 0 评论 -
hdu3790-最短路径最小值
dijkstra模板上加一个花费的判断,注意判重边。#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 1005;const int INF = 0x7fffffff;int n,m;int Map[maxn][ma原创 2017-08-25 17:09:41 · 404 阅读 · 0 评论 -
poj2349-kruskal
题意:n个站点,s个卫星系统,每个卫星系统只能安排在一个站点 有卫星系统的站点间通讯不需要代价 任意两点(i, j)间皆可通讯,代价为dis[i][j] 找到最小的代价使得任意两个站点间均可以通讯 n, s <= 1000 kruskal1、把所有边按从小到大的顺序排序,遍历每条边(u,v) 2、u和v在同一个连通分量中,那么加入(u,v)会成环,不能选择。 3、如果u和v在不同的连通分原创 2017-08-04 21:58:35 · 330 阅读 · 0 评论 -
hdu1285-拓扑排序
题目意思就是只告诉你两两之间谁赢了,让你按照字典序排序。 由题意,可以在稿纸上画成一个树,这时就容易想到用拓扑排序来做了。 拓扑排序的思想是: (1)从有向图中选取一个没有前驱(入度为0)的顶点,并输出; (2)从有向图中删去此顶点; 重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。这道题数据量不大,可以不用建树,或者优先队列什么的来做,直接二位数组模拟也能过,time原创 2017-04-21 18:00:22 · 333 阅读 · 0 评论