![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NOIp_图论
le0tan
Per Aspera Ad Astra
展开
-
【NOIp复习】图论基础算法
图有向图的拓扑排序(用来判环)定义将有向图中的顶点以线性方式进行排序。即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面。存在条件如果存在环,那么就不可能满足u->v时u总是在v的前面了。所以必须是有向五环图(DAG)才能拓扑排序。是否唯一如果该DAG任意两个顶点都有确定的关系,拓扑排序就是唯一的。如果有这么一个唯一的拓扑排序,容易知道这样的顺序恰好能够遍历全图原创 2016-11-06 11:42:57 · 2380 阅读 · 0 评论 -
【模板】匈牙利算法——二分图最大匹配
#include <iostream>#include<cstring>#include<cstdio>#include<cmath>#define maxn 1000using namespace std;int nx,ny,match[maxn];bool vis[maxn],w[maxn][maxn];bool find(int x){ for(int i=1;i<=n原创 2016-11-11 14:43:43 · 234 阅读 · 0 评论 -
【模板】KM算法模板(带注释)——二分图带权最大匹配
/*求最小值就把权值全部取相反数,继续套这个最大值的模板*/ #include <iostream>#include<cstring>#include<cstdio>#include<cmath>const int maxn = 101;const int INF = (1<<31)-1;int w[maxn][maxn];int lx[maxn],ly[maxn]; //顶标in原创 2016-11-10 07:46:28 · 599 阅读 · 0 评论 -
【vijos】【二分图带权匹配】拯救世界-星际大战
描述外星人逐渐逼近,为了保护地球,现在决定直接在外空进行战斗。 现在我们有N个导弹。需要在最短的时间内,用这N个导弹摧毁敌方n个目标(1个导弹只能摧毁1个目标)。N个导弹和目标的位置不一定相同,但是给每个导弹确定目标是一件很麻烦的事情。请你编程帮助给每个导弹确定目标,使每个导弹到其目标的距离之和最小。格式输入格式第一行输入N(N<=20) 接下来N行每行包含一个坐标(x,y),表示一个导弹,-1原创 2016-11-10 08:47:34 · 444 阅读 · 0 评论 -
【vijos】【神读入】Knights
描述在一个N*N的正方形棋盘上,放置了一些骑士。我们将棋盘的行用1开始的N个自然数标记,将列用’A’开始的N个大写英文字母标记。举个例子来说,一个标准的8*8的国际象棋棋盘的行标记为1..8,列标记为A..H,D3、H1分别表示棋盘上第3行第4列和第1行第8列的格子。 骑士是这样一类棋子。若一个骑士放置在格子(x, y)。那么格子(x-2, y-1), (x-2, y+1), (x-1, y-2)原创 2016-11-10 14:06:49 · 330 阅读 · 0 评论 -
【vijos】【二分图最大匹配】银翼の舞
描述怪盗基德如约来到OIBH组织的大门,却发现OIBH组织的大门紧闭。而两旁两个小门则打开着。基德仔细观察之后发现了一些端倪:这两个小门门框上都装着红外线扫描器,能够对通过的物体作出反应。为了对付红外线扫描器,基德能够驱使他的滑翔翼高速飞行制造出N-1个幻影。但由于飞行时速度的不同,创造出的幻影速度也不同。两个幻影之间或幻影与基德之间若速度差距超过k,就会被红外线扫描器识别出来。因此这两个幻影(或幻原创 2016-11-09 22:00:03 · 322 阅读 · 0 评论 -
【vijos】【树形dp】佳佳的魔法药水
描述得到一种药水有两种方法:可以按照魔法书上的指导自己配置,也可以到魔法商店里去买——那里对于每种药水都有供应,虽然有可能价格很贵。在魔法书上有很多这样的记载:1份A药水混合1份B药水就可以得到1份C药水。(至于为什么1+1=1,因为……这是魔法世界)好了,现在你知道了需要得到某种药水,还知道所有可能涉及到的药水的价格以及魔法书上所有的配置方法,现在要问的就是:1.最少花多少钱可以配制成功这种珍贵的原创 2016-11-09 20:50:49 · 312 阅读 · 0 评论 -
【poj】【费用限制最短路】ROADs
题意每条路有一个长度和一个花费,在花费限制内求从1 到n的最短路。分析只要能走到(有道路相连并且花费小于限制)就加入队列,队列中以距离为第一关键字,花费为第二关键字排序。代码#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <algorithm>#define maxn 10100#原创 2016-11-09 12:55:05 · 425 阅读 · 0 评论 -
【vijos】【最短路变式】遭遇战
描述今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区的SQC论坛服务器!我们SQC的人誓死不屈,即将于恐怖分子展开激战,准备让一个人守着A区,这样恐怖分子就不能炸掉服务器了。(一个人就能守住??这人是机械战警还是霹雳游侠?) 但是问题随之出现了,由于DustII中风景秀丽,而且不收门票,所以n名反恐精英们很喜欢在这里散步,喝茶。他们不愿意去单独守在荒无人烟的A区,在指挥官的一再原创 2016-11-09 08:50:31 · 364 阅读 · 0 评论 -
【vijos】【建反图最短路】最优贸易
描述C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市。任意两个 城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路,双向通行的道路在统计条数时也计为 1 条。 C 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价 格不一定相同。但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。原创 2016-11-09 07:35:00 · 211 阅读 · 0 评论 -
【vijos】【spfa最短路】想越狱的小杉
描述小杉看了看自己的纹身,明白了整个管道网是由N个小房间和若干小房间之间的单向的管道组成的。 小房间编号为不超过N的正整数。 对于某个管道,小杉只能在人品不超过一定程度时通过。 小杉一开始在房间1,现在小杉想知道,每个小房间他最多能够以人品多少的状态到达。 注意,小杉的人品在出发以后是不会改变的。格式输入格式每组测试数据的 第一行有一个正整数N(1<=N<=2000)。 接下来若干行描述原创 2016-11-08 20:10:08 · 377 阅读 · 0 评论 -
【vijos】【最短路变式】小D的旅行
描述旅行是一件颇有趣的事情,但是在旅行前规划好路线也很重要。 现在小D计划要去U国旅行。 U国有N个城市,M条道路,每条道路都连接着两个城市,并且经过这条道路需要一定的费用wi。 现在小D想要从u城市到v城市,但是他的汽车需要在途中加一次油(途中包括u和v两个城市)。在每个城市加油都有不同的费用vi。 小D想知道从u城市到v城市最少需要多少费用(经过道路的费用+加油的费用)。 城市从1-n原创 2016-11-08 19:25:23 · 318 阅读 · 0 评论 -
【vijos阴题】【有向图最小环】最佳路线
描述年久失修的赛道令国际汽联十分不满。汽联命令主办方立即对赛道进行调整,否则将取消其主办权。主办方当然必须马上开始行动。 赛道测评人员经过了三天三夜的数据采集,选出了若干可以使用的道路和各道路行驶所需的时间。这些道路包括若干直道和弯道,每个直道连接两个不同的弯道且为单向,两个弯道之间可能有多条直道,通过直道和弯道都需要一定的时间。主办方打算在这些可用道路中选出一部分作为赛道。赛道是由直道和弯道交替原创 2016-11-08 15:53:55 · 1647 阅读 · 0 评论 -
【vijos】【floyd求最小环】观光旅游
背景湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观。学校认为大力发展旅游业,可以带来一笔可观的收入。描述学校里面有N个景点。两个景点之间可能直接有道路相连,用Dist[I,J]表示它的长度;否则它们之间没有直接的道路相连。这里所说的道路是没有规定方向的,也就是说,如果从I到J有直接的道路,那么从J到I也有,并且长度与之相等。学校规定:每个游客的旅游线路只能是一个回路(好霸道的规定)。也就原创 2016-11-08 15:15:40 · 494 阅读 · 0 评论 -
【vijos】【生成树】最小生成树的最小完全图
描述最小生成树P.S.S在宿命的指引下找到了巫师Kismi。P.S.S希望Kismi能帮自己变成一个完全图。Kismi由于某些不可告人的原因,把这件事交给了你。 PS: 可以保证,这个最小生成树对于最后求出的完全图是唯一的。 格式输入格式输入的第一行是一个整数n,表示生成树的节点数。 接下来有n-1行,每行有三个正整数,依次表示每条边的端点编号和边权。 (顶点的边号在1-n之间,边权输出格式原创 2016-11-07 20:17:17 · 2043 阅读 · 0 评论 -
【NOIp复习】图论算法模板合集
#include <queue>#include <vector>using namespace std;//Kruskalstruct edge{ int from,to,val;}e[maxn];bool operator < (const edge&a,const edge&b){ return a.val<b.val;//边按边权排序 }int find(int a原创 2016-11-17 16:10:30 · 655 阅读 · 0 评论