随笔分类 - 图论——最短路径
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2498题意:给定 一个 有向图 ,求出 从 图中只有 一个 入度为0 的点 s 和 一个 出度 为0 的 点 t 求 s 到t的 最长路径 若有 多条 输出 字典序最小的!题解:SPFA + 反向建图 。对于 所要求的路径 ,s 的下一个点 是 与 s相连 且 距离 t 最长的点 ,若有 多个 选择序号 最小的 。所以 自然 想到 求 各个点 到 t 的 最短距离 ,这样就 用到了 反向建图,并用 pre 记录的他的 前驱结点 1 #inclu
阅读全文
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2493好纠结 这么道 破题 比赛是竟然 没做出来 ,比赛 完后 加了个 条件就对了 ,为什么 比赛时 那么 没状态 。。。。。。。。。。。 题意:给出一个无向图 ,一个 原点 s 一个终点 t 求 一条 最短的路径 值 从 s 到 t ,对于 这条路径 可以 将 其中的 一条边的权值 减半。题解 : dij + 枚举 首先 我们可以 得到 知道 对于 t 来说 最小值 = min(与他 连接的点的 最小值 + w[i][t], s 到 i 的
阅读全文
摘要:http://poj.org/problem?id=3463要 深入了解 dij 的标号技术,一但 被标记 ,怎不会 被第二次 标记 。//注意 是有向图。。。。/* 2 求s到t的最短路与次短路(这里要求只比最短路多1)的条数之和 3 4 联想到最小,次小的一种更新关系: 5 if(x<最小)更新最小,次小 6 else if(==最小)更新方法数 7 else if(x<次小)更新次小 8 else if(x==次小)更新方法数 9 10 同时记录s到u最短,次短路及方法数 1112 还是那个原理,第一次遇到的就是最优的,然后vi标记为真 13 方...
阅读全文
摘要:http://poj.org/problem?id=3635题意:有 n 个城市 ,每个 城市的 油价 不一样 ,已知 各 城市之间的距离 ,(假设 一 单位 距离 耗费一单位的 油量)一辆车 的 油箱 最多可以 装 c 升油,求从 s 到 e,的 最小 花费油量,如果不能到达 输出 impossible 。题解:一开始 自己 写了 个,到达每一点后枚举 可以 增加的 油量 结果 tle (太多 无用的状态了)。。。。。。dp[i][j] 表示 到达 城市 i 剩余油量 为 j 的 最小花费; 首先到达每个城市的后 要加的 油量 是 不确定 的 ,所以 我们要 将 每一个城市 拆成 c+ 1.
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4396题意:求 从 一点s 到 e 至少经过k 条边求 最短的值是?(可以走重边);题接:二维最短路 ,d[i][k] 表示 从 s 到 i 点经过 k 条边 的最小值 ,(对于 大于k边数的值 ,并入到 dp[i][k]里 面 )1#include<cstdio>2#include<cstring>3#include<cmath>4#include<iostream>5#include<algorithm>6#include<set>7
阅读全文
摘要:http://poj.org/problem?id=3613 题意:求从一个点s 到 一点 e 经过 n 条边的最短路经是多少(可以有重边):看到很难多解题报告说的是n 个点 ,其实,n 条边 应该是 n - 1 个点 题解:我们知道线性代数中有:在只 含有 01邻接矩阵 A的K次 方C=A^K,C[i][j]表示i点到j点正好经过K条边的路径数。而floyd则是每次使用一个中间点k去更新i,j之间的距离,那么更新成功表示i,j之间恰有一个点k时的最短路,如果做N - 1次floyd那么不就是i,j之间借助N - 1 个点时的最短路了当 c[i][j] > a[i][k] + a[k][
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4370题解: http://page.renren.com/601081183/note/866168965好一道转换思维的题啊,由一道,让人 不知如何下手的题,转换为了 最短路,问题,经典。。。。 我们没有想到啊,看了题解才知道,,思维有点局限啊。。。。 1001 (已更新)显然,题目给的是一个0/1规划模型。 解题的关键在于如何看出这个模型的本质。 3个条件明显在刻画未知数之间的关系,从图论的角度思考问题,容易得到下面3个结论: 1.X12+X13+...X1n=1 于是1号节...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4360题意:有n个点 ,m条边,没条边 哟 4 个属性 起点 u 终点v 长度 l 和 编号 k (k为 L,O,V,E 中的任意一个),求 从1 到n 点的 一条路,要求 含有完整的 1个 或多个 love 串 ,且是 最短的 每条边除了有边权以外,还有一个字母标记。标记可以是“LOVE”里面任意字符。每个点,要拆成四个点,分别代表到达该点的标记为L,O,V,E的最短路。第一步就是求最短路,直接spfa就可以了。trick在于,至少要找到一个LOVE串,在只有一个节点的时候,有几条自环,至少必须走LOVE四
阅读全文
摘要:http://poj.org/problem?id=3767 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<set> 8 #include<map> 9 #define Min(a,b) a>b?b:a 10 #define Max(a,b) a>b?a:b 11 #defin
阅读全文
摘要:在这求第 k 短路用的是,A*+dij 所谓的A* 是一种启发式搜索,他给搜索选定一定的方向,避免了,无谓的搜索,如何来确定搜索的顺序?..也就是用一个值来表示这个值为f[x]..每次搜索取f[x]最小的拓展...那么这个f[x]=h[x]+g[x]其中这个h[x]就是当前搜索时的代价..如求K段路这个就是前一个点的h[x']+边的长度...而g[x]是一个估价函数..估价函数要小于是对当前点到目标的代价的估计..这个估计必须小于等于实际值~~否则会出错...A*的关键也就是构造g[x]..,我们的dij 算法。最短路是,就是一种 A* 搜索,其中 g[x]=0;而这里要说的求K短路一
阅读全文
摘要:http://lghjx.573114.com/Blog/Html/103D/275536.html下面的不是很清楚 ,这个 比较好。简介: 详情 前参见 国家集训队论文 2007年 胡伯涛 论文题意:求存在一个环路,所有的点权之和/所以的边权之和 最大是多少?http://poj.org/problem?id=3621算法:此题是对01分数规划的应用,那么首先明白01分数规划的思想.01分数规划的思想的描述如下:令c=(c1,c2,…,cn)和d=(d1,d2,…,dn)为n维整数向量,那么一个0-1分数规划问题用公式描述如下:FP:最小化(c1x1+…cnxn)/(d1x1…dnxn)=c
阅读全文
摘要:参考来自: http://hi.baidu.com/%D0%C4_%CB%E6_%C3%CE_%CF%E8/blog/item/403b9c58699c7642d0090675.html/* floyd 的扩展 找最小环*/#include<stdio.h>#define maxn 200#define inf 0xffffffint n,m;int dis[maxn][maxn],g[maxn][maxn],path[maxn],pre[maxn][maxn];int min,cnt,mid;void floyd(){ int i,j,k; for(k=1;k<=n;k++
阅读全文