××××××××图论××××××××
WePlayDirty
emmmmmmm
展开
-
密集图的广度遍历
找朋友Time Limit: 1000MS Memory limit: 65536K题目描述X,作为户外运动的忠实爱好者,总是不想呆在家里。现在,他想把死宅Y从家里拉出来。问从X的家到Y的家的最短时间是多少。为了简化问题,我们把地图抽象为n*m的矩阵,行编号从上到下为1 到 n,列编号从左到右为1 到 m。矩阵中’X’表示X所在的初始坐标,’Y’表示原创 2015-01-28 14:39:09 · 2325 阅读 · 0 评论 -
poj2983 Is the Information Reliable?
题中的条件可以整理为两种:A-B=X ,A>B; 即 A-B>=X ,A-B=B+1; 即为:BA-X , A>B+X , B>A-1 .类比与dis[v]>dis[u]+w,所以建立的边为edge(A,B,-X),edge(B,A,X),edge(A,B,-1);因为选择的松弛条件是dis[v]>dis[u]+w,所以如果图中有负权环,就代表关系循环矛盾,就是不可靠,原创 2016-07-27 14:39:52 · 2425 阅读 · 0 评论 -
poj3026 Borg Maze
涉及点:bfs 离散化 最小生成树把S和A同等处理,为每个S,A编号,bfs计算所有点对之间的距离,构成边集;用最小生成树算法连接点,结果就是所求。恶心的是这题的数据,用getchar()或%*c读不掉数字后面的回车,会WA,得用gets()或/n读掉。#include#include#include#include#include#include#include原创 2016-07-18 20:54:45 · 2386 阅读 · 0 评论 -
poj2186 Popular Cows(强连通分量tarjan)
题中给出一张有向图,不保证图连通,如果对于某个点,其他点都有至少一条路径能到达该点,该点就是符合要求的( Popular Cows),问图中有多少这样的点。解法:求强连通分量,对强连通分量缩点,缩点后是一棵树,如果出度为0的缩点个数大于1,则符合要求的点为0个,否则出度为0的缩点(强连通分量)包含的点的个数就是答案。求强连通分量时和双连通分量时,tarjan算法还是不同的!无向图中原创 2016-07-29 09:21:36 · 2251 阅读 · 0 评论 -
poj1201 intervals
给出数轴上的n个区间[ai,bi],现在要在数轴上选取元素,构成一个元素集合V,要求区间[ai,bi]和集合V的交集至少有ci不同的元素,求集合V最少要有的元素个数。约束关系分析:明显有条件dis[bi]-dis[ai]>=ci(dis[bi]>=dis[ai]+ci,类比dis[v]>=dis[u]+w,所以bi为该边终点,ai为该边起点),要求问题的结果可用dis表示为dis[max]原创 2016-07-27 14:46:54 · 2213 阅读 · 0 评论 -
POJ1789 Truck History
就是最小生成树,就记得第一次做的时候题意坑,但还是忘了到底是啥,这次还是没理解题意。// #include#include#include#include#include#include#include#include#define LL long long#define maxn 2100using namespace std;char str[maxn][10];原创 2016-07-23 09:34:17 · 2055 阅读 · 0 评论 -
poj1523 求割点割边
求割点点u是割点的充分条件:1. 如果u是dfs树的根,则u至少有两个子女。2. 如果u不是dfs树的根,则它至少有一个子女w,从w出发,不可能通过和w、w的子孙相连的回边到达u的祖先。 u是割点的充要条件是:u或则是具有两个以上子女的深度优先生成树的根,或则虽然不是根,但它有一个子女w,使得low[w]>=dfn[u]。 求割边有两种判断方法:1. 当点u的子原创 2016-04-13 21:10:18 · 2639 阅读 · 0 评论 -
poj2516Minimum Cost最小费用最大流
DescriptionDearboy, a goods victualer, now comes to a big problem, and he needs your help. In his sale area there are N shopkeepers (marked from 1 to N) which stocks goods from him.Dearboy has M s原创 2016-02-21 10:13:03 · 2174 阅读 · 0 评论 -
(多校第一场1001)HDU5723 Abandoned country
http://acm.hdu.edu.cn/showproblem.php?pid=5723最小生成树+dfs需要结论:给定一棵树,求树上所有点对的距离之和,则树上的每一条边对这个和的贡献就是这条边两端的点的个数的乘积再乘上该边的边长(例如一条树边为w,该边一端点的个数为A,另一端的点的个数为B,则这条边的贡献值就是A×B×W),把所有的A;×B×W累加起来就是所有原创 2016-07-20 11:40:44 · 2508 阅读 · 0 评论 -
poj2049 Finding Nemo(优先队列BFS)
(1)这题细节比较多,nemo的位置可能会很大(例如(100000,1000000));(2)一开始优先队列用错了,习惯性的写成了先出经过门最多的点,一直wa。。(3)意外发现了一组神数据,如果bfs时标记了的话,这组数据可能不对,卡位卡的好啊,总结就是使用优先队列bfs应该在出队的标记,而不是在进队的时候标记;这组数据就是 :4 13 2 1 11 3 0 21 1 0 2原创 2016-07-20 09:44:01 · 2614 阅读 · 0 评论 -
tarjan算法
须知概念:Dfs搜索树,回边,交叉边(无向图的dfs树不存在交叉边);dfn[u] :u的dfs序low[u] :从u或u的子孙出发,通过回边可以到达的最小的dfs序 对于Tarjan算法中,我们得到了dfn和low两个数组,low[u]:=min(low[u],dfn[v])——(u,v)为回边,v不是u的子树;low[u]:=min(low[u],low[v])——原创 2016-04-13 21:21:51 · 3200 阅读 · 0 评论 -
poj3694 Network
给你一张连通无向图,向图中加Q次边,问你每次加边后,图中有几条割边。是可以有重边的,比如原图中边(1,2)是一条割边,再加一条边(1,2) ,就消除掉了一条割边。但是这个题有点别扭,加边的时候会有重边,一开始建图的时候也会有重边,但是建图时不考虑重边(去重)也能AC,比如3 41 22 31 22 321 22 3这组数据,结果感觉应该是0 0,但是用tarjan+lca原创 2016-07-26 09:38:46 · 2525 阅读 · 0 评论 -
邻接表 bfs
图练习-BFS-从起点到目标点的最短步数Time Limit: 1000MS Memory limit: 65536K题目描述在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫。在他们所在的地域,有n个隘口,编号为1..n,某些隘口之间是有通道连接的。其中近卫军团在1号隘口,天灾军团在n号隘口。某一天,天灾军团的领袖巫妖王决定派兵攻打近卫军团,天灾军原创 2015-01-28 20:26:10 · 2440 阅读 · 0 评论 -
poj2253flody变形(最小生成树)
///题意:先求所有通路中青蛙尽量跳小步(小步组成整个通路) 小步中的跳的最大一步的距离(每条通路一个)/// 比较所有以上结果 最小的为最终结果 可以用最小生成树做 当生成树中A和B相通时停止(树可能不完整) 此树中的最大边就是结果#include#include#include#includeusing namespace std;struct node{ in原创 2015-08-06 21:09:43 · 2087 阅读 · 0 评论 -
带权最短路 Dijkstra, SPFA, Bellman-Ford, ASP, Floyd-Warshall 算法分析
图论中,用来求最短路的方法有很多,适用范围和时间复杂度也各不相同。本文主要介绍的算法的代码主要来源如下:Dijkstra: Algorithms(《算法概论》)Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani;《算法竞赛入门经典—训练指南》刘汝佳、陈峰。SPFA (Shortest Path Faster Algorithm转载 2015-08-13 15:46:31 · 3364 阅读 · 0 评论 -
poj2942Knights of the Round Table重连通分量
该题是重连通分量,不是边双连通分量,因为重连通分量有一个边双连通分量没有的性质,就是如果重连通分量内如果有奇圈,则该分量所有的点都包含于一个奇圈;这和题意中,如果该骑士可以参加任何一个会议就不用被开除一致。而即使边双连通分量 ,并且其中包含奇圈,但并不能判断除了该奇圈以外的点是否包含于另外的奇圈。(奇圈就是点的个数是奇数的圆环)证明:如果重连通分量内如果有奇圈,则该分量所有的点都包含于原创 2016-02-21 10:00:01 · 2324 阅读 · 0 评论 -
图的连通性问题&tarjan求强连通分量、割点、桥
基本概念:1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。3.点连通度:最小割点集合中的顶点数。4.割边(桥):删掉它之后,图必然会分裂为两个或两个以上的子图。5.割边集合:如果有一个边集合转载 2016-02-20 09:43:47 · 2771 阅读 · 0 评论 -
浙江省赛zoj3946 Highway Project
Highway ProjectTime Limit: 2 Seconds Memory Limit: 65536 KB Edward, the emperor of the Marjar Empire, wants to build some bidirectional highways so that he can reach other cities from原创 2016-04-25 20:59:03 · 2831 阅读 · 0 评论 -
poj1860 Currency Exchange(flody)
题目给出了有向图的邻接表,求哪个点到其他所有点的距离之和最小,以及该点到其他点的最短距离的最大值。才100个点,用flody跑出所有点对的最短距离,然后O(n)一遍一遍的找。#include#include#include#include#include#include#include#include#include#include#include#inclu原创 2016-07-23 19:09:00 · 2161 阅读 · 0 评论 -
poj3020 Antenna Placement(二分图)
每个*作为二分图点集中的一个点,每个天线可以覆盖两个*,天线就看到成是连接不同集合的点的边,因为不知道这些*属于那个集合,所以就建双向的,最后结果除2。问最少多少天线覆盖所有的点,就是问二分图的最小边覆盖,最小边覆盖=点数-最大匹配数。#include#include#include#include#include#include#include#include#inclu原创 2016-07-23 19:29:23 · 2173 阅读 · 0 评论 -
poj3259 Wormholes(spfa判环)
给你一些路径,path:从s到e花费时间twormhole:从s到e花费时间-t问能不能从某点出发,回到以前的时间点,就是判断有没有可达的负环,而题目应该默认整个图是连通的。随便找个起点,直接判断有没有负换就行了。// #include#pragma GCC diagnostic error "-std=c++11"#include#include#include#inc原创 2016-07-23 20:20:23 · 2238 阅读 · 0 评论 -
poj3352 Road Construction 缩点
有时根据问题的需要,要把边双连通分量抽象为一个点,这就叫缩点。 缩点的根据也是low值;同一边双连通分量的点,low值相同,因为对于该边双连通分量dfs树上的根节点u和其子孙节点v,它们之间除了有一条dfs树边组成的路径之外,肯定还有一条包含回边的路径,所以每个点v都能通过一条非dfs树上的路径到达u点,即所有的low[v]=u; 经过缩点后的无向图是一棵树(树的每一条边都是割边)原创 2016-04-13 21:15:17 · 2375 阅读 · 1 评论