![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Graph
Wearry
这个作者很懒,什么都没留下…
展开
-
La 4128 Steam Roller 状态图上的Dijkstra
题目大意: 给定一个R行C列的网格图和图上的边权(0表示两点之间无法连通), 并已知起点,终点,每次转弯或者启动、停止时需要耗费双倍时间(从上一条边到这一条边的转向和从这条边到下一条边的转向最多计算一次), 求到终点的最短路径。 分析: 我们可以用一个大的状态图来存储整个复杂的图,利用(r, c, dir, doubled)这个状态来表示从上一个点沿着dir的方向到达当前点(r, c)的这条边原创 2016-08-01 21:04:23 · 620 阅读 · 0 评论 -
UVa 11090 Going in Cycle! BellmanFord 判负权环
题目大意: 给你一个由n个点,m条边组成的有向图,求图中最小环的平均长度。 分析: 根据最小环的条件,我们可以通过二分的方法来实现,对于每个当前二分出来的答案,要使得环上的每一条边的平均值小于当前答案,就等价于 ∑w(i,j)|(i,j)∈E<mid∗size(E) \sum w(i,j) | (i, j) \in E < mid * size(E) 进一步可以推导出: ∑(w(i,j原创 2016-07-22 16:55:09 · 280 阅读 · 0 评论 -
La3523 Knights of the round table
题目大意: 给你n个人和m组关系,每组关系表示两个人相互憎恨,而且相互憎恨的人不能在参加一场会议相邻着坐,而且每次会议参加的人数必须为奇数,问最多有多少人不能同时参加一场会议。 分析: 对于每一个人而言,他两边坐的人只能是与他不相互憎恨的,所以我们可以把不相互憎恨的两个人之间连一条边,那么每一次参加会议的人就必须在同一个双连通分量上,这样才能形成过一个环形图,关键是如何判断这个环是不是一个奇环原创 2016-07-17 21:30:39 · 674 阅读 · 0 评论 -
La5135 Mining your own Business
题目大意: 给你n条边,让你添加逃生通道,使得不论删除某一个点之后,任何一个点都能到达至少一个逃生通道。 分析: 若任意一个双连通分量中有两个割顶,因为割顶是与其他双连通分量的交点,所以我们只需要考虑只有一个割顶的双连通分量。对于最坏的情况显然是将割顶删去,所以逃生通道不能建在割顶上,可以证明:若逃生通道不在割顶上,即使它被删去,也仍然可以通过割顶到达另一个双连通分量的逃生通道,所以只需特判整原创 2016-07-18 20:10:40 · 427 阅读 · 0 评论 -
La4287 Proving Equivalences
题目大意: 给你n个命题和m组推导(单向推导), 问至少需要再做几次推导能够使得任意两个命题之间等价。 分析: n个命题全部等价,即如果将每个命题抽象成点,那么已知的推导就是在两点之间连了一条有向边,要使得所有的命题全部等价,则所有的点应该在同一个强连通分量上,我们可以先求出整个图中原有的强连通分量,再将强连通分量视为一个点构造新的图,可以证明这个图中是没有正向的环的(若有正向环的话,则可以构原创 2016-07-18 20:59:30 · 544 阅读 · 0 评论 -
Uva 11324 The Largest Clique
题意: 给你一张有向图G, 求一个最大的节点集,使得该节点集中任意两个点u, v,满足:u可以到达v, 或者v可以到达u(u、v相互到达也可以)。 分析: 在最优的方案中,每一个强连通分量中的点要么都选,要么都不选,那么我们就可以先把所有的强连通分量计算出来,然后再将不同的强连通分量建一个新图,则最优解就是一个Dag上的DP了 代码如下:#include<iostream>#include原创 2016-07-18 21:51:54 · 352 阅读 · 0 评论 -
La3211 Now or later 2-Sat
题目大意: 有n架飞机需要着陆,每架飞机有早着陆和晚着陆两种选择,你要为这些飞机安排着陆计划,使得任意两架飞机的着陆时间间隔的最小值尽量大。 分析: 首先,对于这种最小值最大化大问题,我们很自然的会想到二分答案的方法,对于每一个二分出来的答案,如果存在任意两架飞机的某两种着陆方式时间间隔小于当前二分出来的答案,则说明这两架飞机不能同时选择当前方案,则整个问题就转化为一个经典的2-Sat问题模型原创 2016-07-20 16:57:11 · 341 阅读 · 0 评论 -
La3713 Astronauts 2-Sat
题目大意: 有A, B, C三个任务分配给n个宇航员, 其中每个宇航员要被分配一个任务。所有年龄大于平均年龄的宇航员可以选择A, C两种任务,其余人只能选择B, C两种任务, 同时这n个宇航员中有m组矛盾, i 和 j 之间矛盾表示 i 与 j 不能参与同一项任务。 问每个宇航员应如何分配任务。 分析: 本题是一个典型的2-Sat类型的题目,宇航员之间的矛盾有两种情况, 分别表示两个宇航员属原创 2016-07-20 20:11:06 · 389 阅读 · 0 评论 -
UVa 11374 Airport Express
题目大意: 给你n个点和起点终点,再告诉你m条经济线路和k条商业线路,经济线路可以无限制经过,但商业线路只能乘坐一次,问从起点到达终点的最短距离和路径,并输出在什么位置换成商业线路。 分析: 枚举每一条商业线路, 计算在当前线路换乘的最小费用, 并更新距离即可,注意在这之前要预处理两次,分别从起点和终点出发计算距离和路径。 代码:#include<bits/stdc++.h>using n原创 2016-07-21 08:09:10 · 526 阅读 · 0 评论 -
UVa 10917 A Walk through the forest
题目大意: 给你n个点m条边的无向图, 问从起点(1号点)到达终点(2号点)的总路径数量(要求从每个点u走到下一个点v时满足:v到终点的距离小于u到终点的距离。 分析: 从起点出发到每个点的最短路径可以用一次Dijkstra算法求出,那么原问题就转化成了在一个Dag上求路径数目,可以直接DP或者利用Dijkstra计算出的虽短路树来求解 代码:#include<bits/stdc++.h>原创 2016-07-21 19:33:44 · 390 阅读 · 0 评论 -
La 4080 Warfare and logistics Dijkstra
题目大意: 给定n个点,m条边的无向图, 定义c为任意两点间的最短路之和, 即 c=∑w(i,j)|i∈V,j∈Vc = \sum w(i, j)|i \in V, j \in V 求初始时的c与删去任意一条边后的c’的最大值。 分析: 对于最初始时的c, 我们可以通过每次计算以某个点为源点的最短路径,不难发现,每次计算后的距离和就是初始值c。 每一次进行删边操作时,就可以枚举每一条边原创 2016-07-21 21:01:56 · 376 阅读 · 0 评论 -
UVa 10537 The Toll! Revisited! Dijkstra最短路
题目大意: 告诉你n条边构成的村庄和城镇构成的图,每到达一个村庄减少1个单位的货物,到达一个城镇要减少[(wi+19)/20][(wi+19)/20]个货物,问到达终点时要有p个货物,从起点起应至少携带多少货物,并求字典序最小的的路径。 分析: 我们可以从终点出发,计算到起点时的最短路径,这样起点的距离就代表了从起点出发需要的货物数量,则我们的主要任务就是求出字典序最小的路径。这很好解决,根据原创 2016-07-22 15:10:55 · 373 阅读 · 0 评论 -
UVa 11478 Halum BellmanFord判负权环
题目大意: 给定一个有向图, 每条边都有一个权值, 每次你可以选择一个点v和一个整数d, 使得所有以v为终点的边权值减少d, 以v为起点的边权值增加d, 要使得边权最小的的边尽量大且非负。 代码:#include<bits/stdc++.h>using namespace std;const int maxn = 500 + 10; const int maxm = 2700 + 10;s原创 2016-07-25 10:52:36 · 288 阅读 · 0 评论 -
USACO 4.2.1 iSap + gap优化
关于网络流的增广路系列算法有很多种,其中dinic和iSap是时间效率和代码复杂度平衡上比较优秀的两种算法,而两种算法在增广时的思路基本一致并且iSap算法具有更优的时间效率和程序竞赛上的应用范围为更广,同时相比于预流推进代码实现更加简单,所以这里我们介绍iSap算法在网络流问题当中的应用。 iSap的思想是基于层数这个特别的关键字来进行操作的,主要过程是每一次之寻找最短增广路,然后每次利用残量网原创 2016-07-16 08:08:24 · 965 阅读 · 2 评论