![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 52
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
poj3522——Slim Span
题目大意:给出n个点m条边,选出n-1条边,使得图连通且最大边与最小边的权值差最小。 分析:最小生成树。原题=>边从小到大排序后,枚举前m-n+1条边作为Krustal求最小生成树的最小边。因为krustal算法需要找出n-1条边,所以只有前m-(n-1)条可以作为每次krustal的最小边。 代码: #include <iostream> #include <algorithm> using namespace std; struct Edge{ int原创 2020-08-10 21:16:40 · 205 阅读 · 0 评论 -
leetcode802——Find Eventual Safe States
题目大意:从一个结点出发,最终能走到一个没有出边的点,那么这个起始点称为安全点。给出有向图的邻接表,问图里哪些点是安全点。 分析:dfs。这道题的意思就是看从哪些点出发没有能回到原点的环存在。给图中的结点上色,初始化为0号色,然后dfs时将起始点染1号色(成环的点),安全点染2号色。 代码: class Solution { public: vector<int>...原创 2018-03-22 14:37:50 · 773 阅读 · 0 评论 -
poj3041——Asteroids
题目大意:在N*N的格子中,小行星占有K个格子,发射一道光束可以消灭一行或一列的所有小行星,问最少发射多少道光束可以将小行星全部消灭 输入:N K(1 <= N <= 500)(1 <= K <= 10,000) 第i个小行星的行数R 列数C(共K行) 输出:最少光束个数 分析:每行每列作为结点,每个小行星作为边。 ...原创 2018-01-28 16:26:24 · 184 阅读 · 0 评论 -
poj3020——Antenna Placement
题目大意:给出地图,*代表城市,o代表空地,无线电基站只能覆盖两个城市,想要覆盖所有城市最少用几个基站 输入:case个数 第i个case的行数h 列数w(1 <= h <= 40,0 < w <= 10) 第j行地图(共h行) 输出:第i个case的最少基站个数(每个case占一行) 分析:二分图的最小路径覆盖问题,...原创 2018-01-28 18:24:51 · 124 阅读 · 0 评论 -
poj1469——COURSES
题目大意:给出N个学生登记对P种课程感兴趣的情况,一个学生可以选0、1...多门课,问能不能按规定形成一个有P个人的委员会,规定如下:委员会里的每个学生都代表一个不同的课程;每个课程都有一个课代表 输入:case个数 第i个case的课程数P 学生数N 第j个课程的学生个数Countj 学生号码...(学生号码一共Countj个,中间空格隔开)原创 2018-01-28 20:49:48 · 121 阅读 · 0 评论 -
poj1459——Power Network
题目大意:网络图中有n个结点,其中有np个发电站,nc个耗电站,还有n-np-nc个中转站,给出m条输电线,每个输电线上的运送电量为l(u,v),意为uv结点间的输电量,p(u)代表u结点的产电量,c(u)代表u结点的耗电量,s(u)代表给u结点的供电量,d(u)=s(u)+p(u)-c(u),代表能从u结点输出的电量,规定发电站的c(u)=0,耗电站的p(u)=0,中转站的p(u)=c(u)=0...原创 2018-01-29 11:41:37 · 188 阅读 · 0 评论 -
poj3436——ACM Computer Factory
题目大意: 输入: 输出: 分析: 代码:转载自原创 2018-01-30 11:53:39 · 178 阅读 · 0 评论 -
leetcode743——Network Delay Time
题目大意:根据给出的网络图中的边集合,求出从K结点发出消息使得所有结点都接收到的传播时间。 分析:最小路径。用dijkstra算法,算出K点到每个点的最小路径长度,从中选出最大值就能保证所有节点都能够接收到消息。 代码: class Solution { public: int networkDelayTime(vector<vector<int>>&...原创 2018-03-22 13:29:55 · 326 阅读 · 0 评论 -
leetcode207——Course Schedule
题目大意:给出n个课程之间关于先修课程的关系,[0,1]表示上0课程之前必须先上1课程,问所给出的信息是否矛盾分析:拓扑排序。根据给出的[]数组信息建立有向图,然后进行拓扑排序,若有环则说明有矛盾。代码:class Solution {public: bool canFinish(int numCourses, vector<pair<int, int>>& pre...原创 2018-03-21 14:43:35 · 123 阅读 · 0 评论 -
leetcode210——Course Schedule II
题目大意:给出n个课程之间的先修关系,找出一个上课的顺序 分析:拓扑排序,有环就矛盾,没有环就逐个向答案中添加入度为0的结点 代码: class Solution { public: vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {...原创 2018-03-21 14:59:38 · 315 阅读 · 1 评论 -
leetcode785——Is Graph Bipartite?
题目大意:给出无向图的邻接表,判断它是不是二分图 分析:二分图就是图中的每条边的两个端点分别在两个不同的点集中。我们使用染色法判断一个图是否是二分图。初始化每个点未染色时颜色为0,然后两个点集中的点颜色分别染成1和-1。对图中没有染过色的点dfs进行染色,如果在dfs染色过程中发现已经染色的点和它当前正要被染的颜色不一致,则返回false。bfs也同样能做。 代码: 方法一:dfs cl...原创 2018-03-22 10:43:19 · 265 阅读 · 0 评论 -
leetcode399——Evaluate Division
题目大意:给出一些除法式子,除数和被除数都是字符串形式的字母,商是浮点型实数,根据给出的信息求出提问中的值 分析:图论或者哈希表+dfs。 图论:将分子分母都当做图中的结点,商作为边权,然后只需要用floyd算法算出所求的两点之间是否有路径及路径权重即可。 dfs:首先将两个vector里面的数据读出来建立哈希表,string就是哈希map的key值,...原创 2018-03-21 17:01:48 · 199 阅读 · 0 评论 -
leetcode310——Minimum Height Trees
题目大意:给出一颗无根树,问以哪个节点为根能使得树的高度最小 分析:拓扑排序。要找最小高度的根节点,就是找整个图中最中心的点,也就是距离所有叶节点最远的结点。拓扑排序的思想,每次都取出图中入度为1的结点,删除这些节点并将与他们相邻的结点和他们之间的边删掉,就像剥洋葱一样,逐层删除叶节点,这样最后剩下的结点就是最中心的结点(只可能是一个或者两个) 代码: class Solution { p...原创 2018-07-23 22:26:06 · 203 阅读 · 0 评论 -
poj1094——Sorting It All Out
题目大意:给出n个字母之间的m个大小关系,问能不能找出他们的一个排序 输入:(可以有很多case,输入以0 0结束) n m(2 <= n <= 26) 第i个小于关系(共m行) 0 0 输出:三种情况:1.有顺序则输出:Sorted sequence determined after xxx rela...原创 2018-01-26 18:08:46 · 144 阅读 · 0 评论 -
poj2585——Window Pains
题目大意:在4*4的屏幕上操作9个2*2的窗口,后打开的窗口会覆盖之前打开的窗口,问最后屏幕中呈现的样子可不可能发生 输入:(可以有很多case,个数不超过100个) START 最终屏幕的第i行(共4行,每行4个数字,数字1~9分别代表9个窗口) END ENDOFINPUT(以这行结束) ...原创 2018-01-26 18:04:31 · 144 阅读 · 0 评论 -
poj3259——Wormholes
题目大意:FJ有F个农场,每个农场有N块田地,M条双向路径,W个虫洞,虫洞能让你单向返回到某个时间之前,问FJ能不能从某块田地出发,经过若干田地和虫洞后回到原点遇到出发前的自己 输入:F (1 ≤ F ≤ 5) N M W (1 ≤ N ≤ 500) (1 ≤ M ≤ 2500) (1 ≤ W ≤ 200) S E T(SE之间经过T秒有...原创 2018-01-22 11:43:31 · 145 阅读 · 0 评论 -
poj2253——Frogger
题目大意:青蛙A要跳跃经过一些石头去见青蛙B,每个石头之间都有双向通路,A到B有很多条通路,这些通路中每一条通路都有一段最大距离,问这些最大距离中的最小值是什么,将它作为青蛙的跳跃距离 输入:(可以有很多case,输入以0结束) 石头总个数n(2 第i个石头的坐标xi yi(共n行,第一个是青蛙A,第二个是青蛙B) (0原创 2018-01-22 14:13:12 · 107 阅读 · 0 评论 -
poj1062——昂贵的聘礼
题目大意:探险家想用最少的钱来买物品1,购买方式有原价购买或者去买某种替代品之后来用优惠价购买物品1,其他物品的购买方式同理,但是有一个等级限制,超出等级限制的人不能进行交易。 输入:等级限制M 物品个数N(1 <= N <= 100) 第i个物品的原价格P 主人等级L 替代品个数X 第k个替代品的标号T 第i个物品的优惠价格V...原创 2018-01-22 20:34:10 · 119 阅读 · 0 评论 -
poj1125——Stockbroker Grapevine
题目大意:有n个股票经纪人,他们之间互相传递消息,且耗时不同,问从哪个人开始传递消息,最终所有人都收到消息的最短耗时,如果不能让所有人都收到消息,则输出disjoint 输入:(可以有很多case,输入以0结束) n(1~100) 第i个人的联系人个数 第1个联系人的号码 耗时 第2个联系人的号码 耗时 ...(联系人个数0~n-1 耗时...原创 2018-01-21 11:56:23 · 218 阅读 · 0 评论 -
poj1860——Currency Exchange
题目大意:有n种货币,给出m种兑换方式,问nick能不能用手中的S型货币,经过一系列兑换后赚钱 输入:n m s s型货币的个数V(1 03) a b Rab Cab Rba Cba(共m行 a b两种货币的兑换汇率以及手续费) 输出:YES/NO 分析:用bellman-ford算法(讲解详见http://blog.sina.com.cn/s/blo原创 2018-01-21 18:04:46 · 150 阅读 · 0 评论 -
最短路径算法总结
一、floy算法 O(N³) 适合:多源最短路径 二、dijkstra算法 O(N²) 适合:不存在负权时求单源最短路径 算法步骤:找不在s集合内的所有点中离源点最近的点—>将找到的点加入s集合—>更新所有未加入s集合的点的最短路径(在刚加入的点的基础上更新) 小结:应用floy和dijkstra算法的程序的共同步骤——1.初始化map[][]数组2.输入修改map[][]数组3.相应算原创 2018-01-31 21:41:56 · 245 阅读 · 0 评论 -
poj2485——Highways
题目大意:在N个村庄之间建高铁,让所有村庄都相互可达,问如何建高铁能让所有高铁路段中的最长段最小 输入:(可以有很多case) case个数T(然后空一行) N(3 <= N <= 500) 第i个村庄到第j个村庄的距离(共N行,每行N个数,空格隔开,相当于一个距离矩阵) (每个c...原创 2018-01-25 11:30:16 · 218 阅读 · 0 评论 -
poj1258——Agri-Net
题目大意:在N个农场之间安装光纤网线,使农场之间互通,求网线最小总长度 输入:(可以有很多case) N(3 <= N <= 100) 第i个农场到第j个农场的距离(共N行,每行N个数,空格隔开,距离不超过100000) 输出:网线最小总长度 分析:最小生成树裸题。prim或krustal都可以。由于题里给了距离矩阵,直接p...原创 2018-01-25 14:41:54 · 171 阅读 · 0 评论 -
poj1789——Truck History
题目大意:给出N种车牌的编号,每个编号由七位小写字母组成,一种车牌从另一种车牌衍生而来,衍生的代价就是两个车牌编号中不同字母的个数,问总代价最少是多少 输入:(可以有很多case,输入以0结束) N 第i种类型编码(共N行) 0 输出:The highest possible quality is 1/最小总代价. ...原创 2018-01-25 16:10:35 · 133 阅读 · 0 评论 -
poj2240——Arbitrage
题目大意:给出n种货币的转换汇率,问能不能通过买卖货币赚钱(比如1US=0.5英镑 1英镑 = 10法郎 1法郎= 0.21US 最后能赚0.05US) 输入:n(1<=n<=30) 第i种货币的名字(共n行) 汇率转换表的行数m 源货币名字 汇率 目标货币名字(共m行) 输出:Case i: Yes/No 分...原创 2018-01-21 16:50:26 · 185 阅读 · 0 评论 -
poj2349——Arctic Network
题目大意:给出P个哨所的坐标,他们相互可以在D半径的范围内通信,其中有S个哨所还配备了卫星,有卫星的哨所之间通信不受范围限制,问D的最小值 输入:(可以有很多case) case个数N S P 第i个哨所的坐标xi yi(共P行) 输出:D的最小值 分析:最小生成树的应用,最小生成树中最大的S-1条边可以分配给原创 2018-01-25 17:09:38 · 123 阅读 · 0 评论 -
poj3026——Borg Maze
题目大意:给出一个y行x列的迷宫,从起点S出发,求出要达到全部的终点A所经过的路径长度最小值,重复走过的路径不算入长度 输入:(有N个case) N 第i个case的列数x 行数y 第j行迷宫(共y行,#代表墙) 输出:最短路径 分析:最小生成树的应用。任意两点的最小距离就是横坐标之差加上纵坐标之差,但是由于原创 2018-01-25 17:41:20 · 129 阅读 · 0 评论 -
poj1847——Tram
题目大意:给出N个交叉点,以及每个交叉点能够通往的其他交叉点的标号,起初直达的交叉点为给出的第一个其他交叉点,到达剩下的交叉点都需要翻转一下道路开关,问从起点A到终点B的最少翻转次数 输入:N A B(2 <= N <= 100, 1 <= A, B <= N) 第i个交叉点能通往的其他交叉点个数Ki 第1个交叉点 第2个交叉点...(共Ki个)...原创 2018-01-21 21:47:23 · 291 阅读 · 0 评论