最短路 & 差分约束
文章平均质量分 79
zxxxxzzz
这个作者很懒,什么都没留下…
展开
-
hdu 1548 A strange lift 最短路(spfa)
#include #include #include #include using namespace std; #define N 205 #define maxx 99999999 int a[N][N]; int dis[N]; int vis[N]; int st, ed; int n; int c[N]; void spfa() { memset(vis, 0, sizeof(v原创 2014-11-30 20:57:40 · 454 阅读 · 0 评论 -
hdu 3986 Harry Potter and the Final Battle
和hdu 的1595很像,但是多的是出现重边,即无法用邻接矩阵这种方式存图。而在邻接表记录边是,每次删边的操作,其实就是在松弛过程中遍历到需要删除的边时,跳过即可。那么就可以加一个数组记录边,然后使用时判断是不是要删边就好了。 #include #include #include #include using namespace std; #define N 1005 const int i原创 2014-12-05 20:10:23 · 477 阅读 · 0 评论 -
hdu 1839 Delay Constrained Maximum Capacity Path 二分+ spfa
有N个点,点1为珍贵矿物的采矿区, 点N为加工厂,有M条双向连通的边连接这些点。走每条边的运输容量为C,运送时间为D。选择一条从1到N的路径运输, 这条路径的运输总时间要在T之内,在这个前提之下,要让这条路径的运输容量尽可能地大。一条路径的运输容量取决与这条路径中的运输容量最小的那条边。 带限制的最短路--- 由于每条路都是有一定容量的,相对来说,容量越大那么满足的边就越少。就可以二分容量原创 2014-12-06 15:19:58 · 424 阅读 · 0 评论 -
hdu 3832 Earth Hour(斯坦纳树)
题意:校园平面内有一些灯,在(X,Y)的点能照亮半径为R的圆的面积。两个圆有一部分重合或者边相切认为这两个圆相连。问删去一些圆是否圆1 2 3是否能直接或间接的联通。若可以则输出最大能删去的圆的数目,不行则输出-1. 原来这种神奇的东西叫做斯坦纳树。。当然最后是最短路写出来的,分别以1 2 3为源点spfa。然后求得D1【】, D2【】, D3【】。则ans = n-min(d1【】 + d2【原创 2014-12-08 19:25:53 · 585 阅读 · 0 评论 -
hdu 3631 Shortest Path (floyd)
n个点从0 , 1, 2 ,3.....n-1,这些点只有被标记过之后才能走,求给出的两点之间的最短路。 Floyd的思想拿来插点。很容易想到两种更新两点之间距离的大概思路: 1:给出的两点X,Y,遍历所有点看是否能够松弛,即dis【X】【Y】 = MIN(dis【x】【i】 + dis【i】【Y】)。 2:对每次给出的新的标记的点Z,以其为松弛点遍历整张图里的点对之间距离,即dis【i】【原创 2014-12-08 18:10:18 · 421 阅读 · 0 评论 -
hdu 2145 zz's Mysterious Present
题意:N个城市M个人K条单向边,每个人的速度不同,且在一些城市中。求到达终点时用时最少的人的编号。当用时相同时速度大的优先,速度也相同时编号大优先。 建反向边以终点为源点跑一次spfa即可。因为求的是时间,开始是把时间放在spfa的松弛里面更新的,,但其实T = S / V,求出S(dis)也就求出了时间,我的蠢愚。。 #include #include #include #include原创 2014-12-09 21:42:20 · 508 阅读 · 0 评论 -
hdu 3873 Invade the Mars(heap + dij变形)
思路:题目意思很简单,就是说如果没有攻占保护x的城市,就不能攻占,我们可以用pro[x]记录保护x的所有城市被攻占的最早时间,那么能到x的最短时间为pro[x]和到达x的最短路中的较大者 .dij入队过程中只把In[x](没有被包含的城市)入队 对于出队的x,它的最短时间已经确定,表示已经被占领,它所保护的城市的保护度减 1,一旦某个被保护的城市的保护度为零且已经到底(未占领,d[x]!=inf原创 2014-12-08 22:04:47 · 722 阅读 · 0 评论 -
hdu 3268 Columbus’s bargain (spfa)
题意:哥伦布找土著换东西,共有四个方案:1 拿钱换等价的东西,(无用条件)2 拿一颗玻璃球代替一枚金币,然后换等价的东西。3 等价的东西可以互换(容易落下这个条件)。4 用东西+钱 换另一样东西(不是补差价),比如 price[1] = 5, price [2] = 20, 但是可以用 thing1 + 5换得thing2 = =。 从上面第四点很明显看出是一个潜在的松弛过程。那么建图的时候就建原创 2014-12-10 21:45:02 · 601 阅读 · 0 评论 -
zoj 3781 Paint the Grid Reloaded 最短路变形
题意:给出n*m的只包含‘X’或‘O’的矩阵,可以将一个联通块内所有相连的X翻转成O,也可以将相连的O翻转成X,(相连指有一边相连)问翻转到同一种字符的最少次数 将联通块缩点,然后到别的联通块的距离就是翻转到该联通块需要的次数,对以每个联通块为起点跑一次最短路,求出最长距离,然后在最长距离里面找最短的就行了 /******************************************原创 2015-03-14 12:53:39 · 423 阅读 · 0 评论 -
hdu 3416 Marriage Match IV dijkstra + isap
Problem Description Do not sincere non-interference。 Like that show, now starvae also take part in a show, but it take place between city A and B. Starvae is in city A and girls are in city B. Every原创 2015-07-14 13:57:41 · 291 阅读 · 0 评论 -
hdu 1599 find the mincost route floyd求最小环
最小环见 点击打开链接 #include #include #include using namespace std; const int inf = 1 << 28; const int N = 105; int a[N][N]; int dis[N][N]; int n, m; int ans; void init() { for( int i = 1; i <= n; i原创 2014-12-05 21:19:20 · 351 阅读 · 0 评论 -
hdu 1595 find the longest of the shortest (spfa)
记录最短路上的路径依次枚举删掉,看看剩下的最短路最大值是多少。 #include #include #include #include using namespace std; #define N 1005 const int inf = 1 << 28; struct node{ int to, nxt, w; }e[N*N]; int dis[N], vis[N]; int原创 2014-12-04 20:31:24 · 472 阅读 · 0 评论 -
hdu 1535 || poj 1511 Invitation Cards(heap + dijstra || spfa)
最短路,先从起点1开始求到所有点的距离和,然后建原创 2014-11-09 15:24:32 · 445 阅读 · 0 评论 -
hdu 2112 HDU Today 最短路
最短路裸题。 #include #include #include #include #include #include using namespace std; #define N 10055 #define maxx 99999999 int n, m; int vis[N], ans[N]; char s[32], e[32]; struct node { int dis[300原创 2014-11-23 16:11:39 · 441 阅读 · 0 评论 -
hdu 4276 树形dp + 最短路
#include #include #include #include #define N 105 using namespace std; int a[N]; struct node{ int to, nxt, cost; }edge[N * 3]; int head[N]; int dp[N][N * 5]; int cnt; int n, t; int tt; voi原创 2014-10-30 21:32:35 · 690 阅读 · 2 评论 -
hdu 3790 最短路径问题
使用邻接表的过了,邻接矩阵的跪了囧rz。改不出来望路过的看出哪里错的人赐教== 邻接表: #include #include #include #include using namespace std; const int M = 100005; const int N = 1004; const int inf = 0x3f3f3f3f; struct node{ int nx原创 2014-12-01 18:55:54 · 472 阅读 · 0 评论 -
hdu 2066 一个人的旅行 spfa + 建超级源点汇点
#include #include #include #include using namespace std; const int N = 10005; const int inf = 1 << 27; struct node{ int to, nxt, w; }e[N*2]; int dis[N]; int head[N]; int T, S, D; int maxx; int tot原创 2014-12-01 19:41:25 · 511 阅读 · 0 评论 -
hdu 1217 Arbitrage (Floyd)
#include #include #include #include #include #include #include using namespace std; const int N = 50; map mp; int cnt; int n, m; double a[N][N]; int main() { int _ = 1; cin.sync_with_stdio( 0 );原创 2014-12-01 21:03:32 · 424 阅读 · 0 评论 -
hdu 1317 XYZZY spfa判断负环
#include #include #include using namespace std; const int N = 105; const int inf = 1 << 28; int a[N][N], c[N]; int dis[N]; int cost[N]; int vis[N]; int n; bool spfa() { memset(dis, 0, sizeof(dis原创 2014-12-02 21:48:50 · 515 阅读 · 0 评论 -
hdu 1546 Idiomatic Phrases Game (spfa)
读取的字符串一定要开的大一点啊不然就是无尽的RE #include #include #include #include #include using namespace std; const int N = 1005; const int inf = 1 << 28; struct pp{ int st, ed, val; }p[N]; struct node{ int原创 2014-12-03 17:10:19 · 560 阅读 · 0 评论 -
hdu 2923 Einbahnstrasse
#include #include #include #include #include #include #include using namespace std; const int N = 105; const int inf = 1 << 28; struct node{ int nxt, to, w; }e[N*N]; map mp; string str[N*10];原创 2014-12-03 20:38:20 · 476 阅读 · 0 评论 -
hdu 5294 Tricks Device 2015 Multi-University Training Contest 1 isap + dijkstra
题意:给出一张连通图,起点1终点n,问起点到终点有多少条最短路(边不重合),及最多删掉多少条边后还能通过最短路从起点走到终点。 第一个问题直接在最短路的新图上跑一发最大流,第二个问题在跑最短路的时候记录下最短路中用到最少边的最短路即可。类似hdu 的3416 #include #include #include #include #include #include #include原创 2015-07-21 20:03:19 · 332 阅读 · 0 评论