We all love short and direct problems, it is easier to write, read and understand the problem statement.
Here is one of these problems. \Life is too short to make a story", said Ahmed Aly.
You are given a weighted directed graph of N nodes (the nodes are numbered from 1 to N), where
the weights of the edges are distinct and positive. For each graph, you are also given a list of queries
to answer.
Each query will be represented by 3 integers A B C, which means you need to nd the shortest
path (the path with minimum sum of weights of its edges) which goes from node A to node B and uses
at most C edges, such that the weights of the edges in that path are in increasing order along the path,
which means the weight of each edge in that path should be greater than the weight of the edge before
it (unless it is the rst edge in the path).
Your task is to write a program which answers these queries.
Input
Your program will be tested on one or more test cases. The rst line of the input will be a single
integer T, the number of test cases (1 T 100). Followed by the test cases, the rst line of each
test case contains 3 integers separated by a single space N M Q (2 N 150), (0 M 3; 000) and
(1 Q 1; 000) representing the number of nodes, the number of edges and the number of queries,
respectively. Followed by M lines, each line contains 3 integers separated by a single space X Y Z
(1 X; Y N) (1 Z 3; 000) which represent an edge going from the node X to the node Y with
cost Z (X and Y will be different). Followed by Q lines, each line contains 3 integers separated by a
single space A B C (1 A;B N) (0 C M) which represent a query as described above (A and
B will be different).
Note that there might multiple edges between the same pair of nodes.
Output
For each test case, print a single line for each query which contains a single integer, the minimum sum
of weights for a path between the given pair of nodes which satises the given constraints, or `-1' if
there is no valid path between the given nodes which satises the given constraints. The output must
not contain empty lines between the cases.
Sample Input
1
8 9 3
1 2 1
2 3 2
3 4 3
4 5 12
5 8 7
1 6 8
6 4 9
1 7 5
7 4 4

1 4 2
1 4 3
1 4 1

Sample Output
17
6
-1

30秒 ,100个点,3000条边,1000次询问。

从x到y用的边数不超过b条而且每次走过的边的权值都要递增所需要的权值和。

先对边进行排序。

然后用dp[i][j][k] 表示 i -> j 用的边数等于 k 条 所需要的最少权值。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=;
const int M=;
const int inf = 1e9; struct node
{
int x,y,w;
bool operator < (const node &a)const{
return w<a.w;
}
}e[N]; int dp[M][M][M];
int n,m,q;
void update(int &a,int b){
if(a==-||b<a)a=b;
}
void run()
{
int x,y,b,w;
scanf("%d%d%d",&n,&m,&q);
memset(dp,-,sizeof(dp));
for(int i=;i<=n;++i)
dp[i][i][]=; for(int i=;i<m;++i)
{
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].w);
}
sort(e,e+m);
for(int i=;i<m;++i){
for(int j=;j<=n;++j){
for(int k=;k<n;++k){
if( dp[j][e[i].x][ k- ] != -){
update(dp[j][e[i].y][k],dp[j][e[i].x][k-]+e[i].w);
}
}
}
} for(int i=;i<q;++i){
scanf("%d%d%d",&x,&y,&b);
if(b >= n) b=n-;
int ans = -;
for(int j=;j<=b;++j){
if( dp[x][y][j] != -) update(ans,dp[x][y][j]);
}
printf("%d\n",ans);
}
}
int main()
{
int _;
scanf("%d",&_);
while(_--)run();
return ;
}

UVAlive 6756 Increasing Shortest Path的更多相关文章

  1. hdu-----(2807)The Shortest Path(矩阵+Floyd)

    The Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. zoj 2760 How Many Shortest Path 最大流

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1760 Given a weighted directed graph ...

  3. The Shortest Path in Nya Graph

    Problem Description This is a very easy problem, your task is just calculate el camino mas corto en ...

  4. hdu 3631 Shortest Path(Floyd)

    题目链接:pid=3631" style="font-size:18px">http://acm.hdu.edu.cn/showproblem.php?pid=36 ...

  5. Shortest Path(思维,dfs)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  6. Shortest Path

    Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  7. (中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。

    Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...

  8. 【ZOJ2760】How Many Shortest Path

    How Many Shortest Path 标签: 网络流 描述 Given a weighted directed graph, we define the shortest path as th ...

  9. [Swift]LeetCode847. 访问所有节点的最短路径 | Shortest Path Visiting All Nodes

    An undirected, connected graph of N nodes (labeled 0, 1, 2, ..., N-1) is given as graph. graph.lengt ...

随机推荐

  1. linux安装 inotify

    [root@rsync-client-inotify ~]# yum install make gcc gcc-c++ [root@rsync-client-inotify ~]# wget http ...

  2. Linux 内核层和 用户层 配置 GPIO 引脚

    Linux BSP 开发的基础就是和GPIO打交道, 下面总结下这几天对某家开发板的GPIO控制的知识. 公司的开发板用的是 DTB  模式 ,首先,进入 dts,dtsi文件查看关于GPIO 的模块 ...

  3. vue.js 笔记

    <!-- 多层for循环 --> <ul> <li v-for="(ite,key) in list2"> {{key}}-------{{it ...

  4. Git命令——撤销修改

    Git命令 1. 撤销修改 (1) 当改乱了工作区(working directory)某个文件的内容,想直接丢弃工作区中的修改时,用命令git checkout -- file. (2) 当不但改乱 ...

  5. thinkphp 系统变量

    一.查看可用变量 dump($_SERVER); 可以直接在html输出系统变量的值 <p>{$Think.server.HTTP_HOST}</p>. 二.环境变量 1.查看 ...

  6. javascript笔记收集

    因为前端编程的兴起, 慢慢地对css/javascript越来越淡, 偶尔用一下,得查半天资料. 这里就收藏一下比较生僻, 但是做工具时会用到的. json获取属性名 Object.keys(), 只 ...

  7. 【大量干货】史上最完整的Tengine HTTPS原理解析、实践与调试

    本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验.内容主要有四个方面:HTTPS趋势.HTTPS基础.HTTPS实践.HTTPS调试. 一.HTTPS趋势 这一 ...

  8. C#第一个程序Helloworld

  9. ClickOnce是什么?如何使用?

    ClickOnce是一种部署方式,主要解决C/S软件版本更新后,所有客户端都要重新安装的问题. 场景:假如,你的客户有1000个,你的服务端更新后,这1000个客户都要重新安装,难道要员工一个一个的电 ...

  10. 如何将word内容粘贴到富文本编辑器里面

    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...