SGU 145.Strange People(无环K短路)
时间:0.25s
空间:4m
题意:
其实就是求无环第K短路。
输入:
给出n,m,k,分别代表,n个点,m条边,第k长路。
接下来m行,三个整数x,y,z,分别代表x,y之间有条费用为x的双向路。保证没有重边。
输出:
第一行两个数a,b,第k小费用a,和经过的点的个数b。
接下来b个数,代表第k短的路径。
Sample Input
5 10 3
1 2 6
1 3 13
1 4 18
1 5 35
2 3 14
2 4 34
2 5 17
3 4 22
3 5 15
4 5 34
1 5
Sample Output
35 2
1 5
Solution:
求k短路的算法,基本都是A*,这里的数据量比较小,可以采用二分答案。
二分路径的长度,DFS求出有多少条路径的长度小于它,如果是(k-1)的话直接输出。 PS:sgu在这一题上数据似乎出了问题,很多人都PE没法AC,我试着提交别人AC过的代码还是pe。
因此代码没有AC,但对程序的正确性有把握。 参考代码:
#include <cstdio>
const int INF = 111;
int g[INF][INF], vis[INF], path[INF];
int n, m, k, x, y, z, l, r, mid, leSum;
int S, T, pd, len, tol;
void dfs (int x, int dis) {
vis[x] = 1;
if (x == T) {
if (dis < mid) leSum++;
if (!pd && dis == mid) leSum++, pd = 1;
}
else
for (int i = 1; i <= n; i++)
if (!vis[i] && g[x][i] && dis + g[x][i] <= mid)
dfs (i, dis + g[x][i]);
vis[x] = 0;
}
int check (int x) {
pd = leSum = 0;
dfs (S, 0);
return leSum;
}
int getPath (int x, int dis) {
vis[x] = 1;
if (x == T && dis == len) {
path[++tol] = x;
return pd = 1;
}
else
for (int i = 1; i <= n; i++) {
if (!vis[i] && g[x][i] && g[x][i] + dis <= len) {
if (getPath (i, dis + g[x][i]) ) path[++tol] = x;
if (pd) return 1;
}
}
vis[x] = 0;
}
int Search () {
while (l <= r) {
mid = l + (r - l >> 1);
int tem = check (mid);
if (tem == k)
return mid;
else if (tem > k)
r = mid - 1;
else l = mid + 1;
}
return -1;
}
int main() {
scanf ("%d %d %d", &n, &m, &k);
for (int i = 1; i <= m; i++) {
scanf ("%d %d %d", &x, &y, &z);
g[x][y] = g[y][x] = z, r += z;
}
scanf ("%d %d", &S, &T);
len = Search();
pd = tol = 0;
getPath (S, 0);
printf ("%d %d\n", len, tol);
for (int i = tol; i > 1; i--)
printf ("%d ", path[i]);
printf("%d\n",path[1]);
return 0;
}
SGU 145.Strange People(无环K短路)的更多相关文章
- 【10.9校内练习赛】【搜索】【2-sat】【树链剖分】【A_star k短路】【差分约束+判负环】
在洛谷上复制的题目! P3154 [CQOI2009]循环赛 题目描述 n队伍比赛,每两支队伍比赛一次,平1胜3负0. 给出队伍的最终得分,求多少种可能的分数表. 输入输出格式 输入格式: 第一行包含 ...
- bellman-ford算法求K短路O(n*m),以及判负环O(n*m)
#include<iostream> #include<algorithm> #include<cstring> using namespace std; cons ...
- javascript实现有向无环图中任意两点最短路径的dijistra算法
有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...
- 【K短路】牛慢跑
牛慢跑 据说是\(k\)短路模板,要用\(A^*\),然而我不会.我是用拓扑排序加堆优化广搜水过去的.第一道完全靠自己做出来的紫题,调了两个小时,交了两遍.果然我还是太菜了. 正解的话,可以看红太阳的 ...
- JavaScript + SVG实现Web前端WorkFlow工作流DAG有向无环图
一.效果图展示及说明 (图一) (图二) 附注说明: 1. 图例都是DAG有向无环图的展现效果.两张图的区别为第二张图包含了多个分段关系.放置展示图片效果主要是为了说明该例子支持多段关系的展现(当前也 ...
- POJ 2449 Remmarguts' Date --K短路
题意就是要求第K短的路的长度(S->T). 对于K短路,朴素想法是bfs,使用优先队列从源点s进行bfs,当第K次遍历到T的时候,就是K短路的长度. 但是这种方法效率太低,会扩展出很多状态,所以 ...
- 第k短路
poj 2449 模板题 A*+spfa #include<iostream> #include<cstdio> #include<cstring> #inclu ...
- 【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105 ...
- bzoj 1598: [Usaco2008 Mar]牛跑步 [k短路 A*] [学习笔记]
1598: [Usaco2008 Mar]牛跑步 题意:k短路 ~~貌似A*的题目除了x数码就是k短路~~ \[ f(x) = g(x) + h(x) \] \(g(x)\)为到达当前状态实际代价,\ ...
随机推荐
- mongodb exception in initAndListen: 12596 old lock file, terminating 解决方法
错误信息如下: exception in initAndListen: 12596 old lock file, terminating 基本上都是由于服务器断电等异常中断重启引起 解决方法 1.删除 ...
- 1044 - Palindrome Partitioning(区间DP)
题目大意: 给你一个字符串,问这个字符串最少有多少个回文串. 区间DP直接搞 #include<cstdio> #include<cstring> #include&l ...
- Windows 安装Django并创建第一个应用
学习python 也有一段时间了,语法也学得差不多了,突然就想学一学python的web开源开源框架Django,我用的是Django-1.6.2.tar.gz,可以在官网https://www.dj ...
- Tomcat8 配置NIO
conf/server.xml 打开:<Executor name="tomcatThreadPool" namePrefix="catalina-exec-&qu ...
- maven 私服 配置 转
3 . Nexus预置的仓库 点击左侧 Repositories 链接,查看 Nexus 内置的仓库: Nexus 的仓库分为这么几类: hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件( ...
- HTTP 返回时间 概念 TTFB..
课外学习部分: 什么是TTFB呢? 1.TTFB (Time To First Byte),是最初的网络请求被发起到从服务器接收到第一个字节这段时间,它包含了 TCP连接时间,发送HTTP请求时间和获 ...
- winform 读取TXT文件 放在Label中 分类: WinForm 2014-07-31 09:56 310人阅读 评论(0) 收藏
<span style="font-family: Arial, Helvetica, sans-serif;">#region 读取TXT 文件,放到Label中&l ...
- BFS-hdu-4101-Ali and Baba
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4101 题目大意: 给一个矩阵,0表示空的可走,-1宝藏的位置(只有一个),其余的正整数表示该位置石头 ...
- 免费WiFi,仅仅为好久没联系的你们
昨日,认识五年的朋友搬来与我一起住了,说不上来,没有激动,仅仅是突然感觉生活又多了一点生机.兴致上来,晚上立马联系了已经近四个月没有联系的好友,才知道他们的生活也因这几个月发生了翻天覆地的变化.究竟什 ...
- [Redux] Navigating with React Router <Link>
We will learn how to change the address bar using a component from React Router. In Root.js: We need ...