More lumber is required
hdu4396:http://acm.hdu.edu.cn/showproblem.php?pid=4396
题意:一个无向带权图,然后给出起点s,终点e,让你求s到e的最短路径,但是这里的路径有要求的。每经过一条边会得到10单位的财富,这条路径必须得到的财富至少k值。
题解:一开始以为是DP,看了别人的代码,才知道了这就是传说中的二维最短路径。然后学习了一下,其实,就是图上的DP。dist[i][j]表示到达i点得到j个财富的最短路径。然后,利用spfa跑最短路,在这个过程中不断更新dist数组,最终的dist[e][k]就是所求的答案。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define inf 100000000
using namespace std;
int n,m;
int s,e,k;
struct Edge{
int v;
int val;
int next;
}edge[];
int dist[][],vis[][];
struct Node{
int pos,num;
};
int head[];
int cnt;
void init(){
cnt=;
memset(head,-,sizeof(head));
}
void addedge(int u,int v,int val){
edge[cnt].v=v;
edge[cnt].val=val;
edge[cnt].next=head[u];
head[u]=cnt++;
}
int SPFA(int s,int e,int k){
for(int i=;i<=n;i++)
for(int j=;j<=k;j++)
dist[i][j]=inf;//初始化
memset(vis,,sizeof(vis));
Node tmp;
tmp.pos=s;
tmp.num=;
dist[s][]=;
vis[s][]=;
queue<Node>Q;
Q.push(tmp);
while(!Q.empty()){
Node t=Q.front();
Q.pop();
vis[t.pos][t.num]=;//可能会多次加到队列
for(int i=head[t.pos];i!=-;i=edge[i].next){
Node tp;
tp.pos=edge[i].v;
tp.num=t.num+;
if(tp.num>k)
tp.num=k;//题目是至少得到k,所以在以相同路径长度当到达e时候能得到更多的财富是符合要求的
if(dist[tp.pos][tp.num]>dist[t.pos][t.num]+edge[i].val){//更新dist数组
dist[tp.pos][tp.num]=dist[t.pos][t.num]+edge[i].val;
if(vis[tp.pos][tp.num]==){//如果不在队列,则把这个加入队列
vis[tp.pos][tp.num]=;
Q.push(tp);
}
}
}
}
if(dist[e][k]==inf)return -;
else
return dist[e][k];
}
int main(){
int a,b,c;
while(~scanf("%d%d",&n,&m)){
init();
for(int i=;i<=m;i++){//建图
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,c);
addedge(b,a,c);
}
scanf("%d%d%d",&s,&e,&k);
int ans=SPFA(s,e,k);
printf("%d\n",ans);
} }
More lumber is required的更多相关文章
- HDU 4396More lumber is required 过至少K条边的最短路
/* ** 题目要求过最少k条边的最短路 */ #include <iostream> #include <cstdio> #include <cstring> # ...
- 2012 Multi-University #10
容斥原理 A Number Sequence 题意:给出n个数,b1,b2,b3……bn,构造n个数,a1,a2,……an(ai>1),使得a1*a2*a3……an=b1*b2……bn 分析:容 ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- 转载 - 最短路&差分约束题集
出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★ ...
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- required
required,这是HTML5中的一个新属性:这是HTML5中input元素中的一个属性. required译为必须的,在input元素中应用这一属性,就表示这一input元素节点是必填的或者必选的 ...
- The type javax.ws.rs.core.MediaType cannot be resolved. It is indirectly referenced from required .class files
看到了http://stackoverflow.com/questions/5547162/eclipse-error-indirectly-referenced-from-required-clas ...
- Hibernate整合Spring异常'sessionFactory' or 'hibernateTemplate' is required
今日在写GenericDao时,发现了一个异常,内容如下: org.springframework.beans.factory.BeanCreationException: Error creatin ...
- 关于Access restriction: The type 'Application' is not API (restriction on required library)
原文链接:http://rxxluowei.iteye.com/blog/671893 今天写第一次写JavaFX的入门程序就GG 遇到了导入API的问题,无奈疯狂地通过网络找解决方案.. 我的问题是 ...
随机推荐
- Solr和ES对比
Solr与ES(ElasticSearch)对比 搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分 ...
- hive 显示表分区真实对应数据路径
desc formatted l_ad_yclick_html partition (datecol='20160118');
- android string.xml里的空格字符
在string.xml定义字符串的时候常常要用到空格, 直接用键盘敲的话不知道是几个空格,常常看错了,导致误删. 假设用 来替代空格的话,就好非常多. 另外使用%1$s,%1$d能够在一个字符串里定义 ...
- 一个站点的诞生06-- ORM
站点上的数据,存在数据库里. 一般用Mysql,也实用sqlite,Postgre.操作数据库要会SQL语言,这个有点麻烦,经常须要查手冊. 此外.每家数据库在实现SQL语言的时候,经常会加料,添加一 ...
- linux下显卡信息的查看
lspci | grep -i vga 这样就可以显示机器上的显卡信息,比如 [root@localhost conf]# lspci | grep -i vga01:00.0 VGA compat ...
- linux查看cpu温度
分类: linux系统 一.安装 sudo apt-get install lm-sensors 二.查看 linux@cdyemail:~$ sensors k10temp-pci-00c ...
- Android Rom修改
最近项目里要实现修改开机动画 屏蔽系统桌面等一些涉及到修改底层的功能 一开始研究了一番 心想着看来这是要定制系统 做rom开发了 所以就牛逼哄哄的跑去下源码 研究rom开发 后来发现这将是一个庞大的工 ...
- Scala的一些语言特点
1. 所有的基本数据类型都是对象,比如数值1的所说的类是 scala.Int 2. 所有的运算符都是类成员方法,比如1+2调用1.+(2); 0 to 2 调用 0.to(2) 3. 数组的访问也是通 ...
- 使用 trait 时报PHP Parse error: syntax error, unexpected 'use' (T_USE) 这个错误
找一大圈原因, 最后终于找到了, 不是PHP版本的原因[], 是自己把use 写到了类里的方法里了. 这个东东, 不能脱离类单独使用, 否则的话, 会被认为是命名空间了. 测试例子如下 // Tra ...
- Android系统移植与驱动开发——第六章——使用实例来理解Linux驱动开发及心得
Linux驱动的工作方式就是交互.例如向Linux打印机驱动发送一个打印命令,可以直接使用C语言函数open打开设备文件,在使用C语言函数ioctl向该驱动的设备文件发送打印命令.编写Linux驱动最 ...