题目链接:http://poj.org/problem?id=1724

思路:

有限制的最短路,或者说是二维状态吧,在求最短路的时候记录一下花费即可。一开始用SPFA写的,900MS险过啊,然后改成Dijkstra+priority_queue,60MS,orz.

SPFA:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define MAXN 104
#define inf 1<<30
typedef pair<int,int>Pair; struct Edge{
int v,w,c;
Edge(int vv,int ww,int cc):v(vv),w(ww),c(cc){}
}; vector<vector<Edge> >map;
int dist[MAXN][MAXN*MAXN];//在点i花费j的最短路径
bool mark[MAXN][MAXN*MAXN];
int k,n,m,MIN; bool SPFA()
{
memset(mark,false,sizeof(mark));
for(int i=;i<=n;i++)
for(int j=;j<=k+;j++)
dist[i][j]=inf;
queue<Pair>Q;
Q.push(make_pair(,));
dist[][]=;
mark[][]=true;
while(!Q.empty()){
Pair pp=Q.front();
Q.pop();
int u=pp.first,c=pp.second;
mark[u][c]=false;
for(int i=;i<map[u].size();i++){
int v=map[u][i].v;
int w=map[u][i].w;
int cc=map[u][i].c+c;
if(cc>k)continue;
if(dist[u][c]+w<dist[v][cc]){
dist[v][cc]=dist[u][c]+w;
if(!mark[v][cc]){
mark[v][cc]=true;
Q.push(make_pair(v,cc));
}
}
}
}
MIN=inf;
for(int i=;i<=k;i++)MIN=min(MIN,dist[n][i]);
return MIN<inf;
} int main()
{
int u,v,w,c;
while(~scanf("%d%d%d",&k,&n,&m)){
map.clear();map.resize(n+);
while(m--){
scanf("%d%d%d%d",&u,&v,&w,&c);
map[u].push_back(Edge(v,w,c));
}
if(SPFA()){
printf("%d\n",MIN);
}else
puts("-1");
}
return ;
}

Dijkstra+priority_queue:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define MAXN 104
#define inf 1<<30
typedef pair<int,int>Pair; struct Edge{
int v,w,c;
Edge(int vv,int ww,int cc):v(vv),w(ww),c(cc){}
}; struct Node{
int u,dd,cost;
bool operator < (const Node &p) const {
if(p.dd==dd)return p.cost<cost;
return p.dd<dd;
}
}; vector<vector<Edge> >map;
int k,n,m,MIN; bool Dijkstra()
{
priority_queue<Node>Q;
Node p,q;
p.u=,p.dd=,p.cost=,MIN=inf;
Q.push(p);
while(!Q.empty()){
p=Q.top();
Q.pop();
int u=p.u,dd=p.dd,cost=p.cost;
if(u==n){ MIN=dd;break; }
for(int i=;i<map[u].size();i++){
int v=map[u][i].v,w=map[u][i].w,c=map[u][i].c;
if(cost+c<=k){
q.u=v;q.dd=dd+w;q.cost=cost+c;
Q.push(q);
}
}
}
return MIN<inf;
} int main()
{
int u,v,w,c;
while(~scanf("%d%d%d",&k,&n,&m)){
map.clear();map.resize(n+);
while(m--){
scanf("%d%d%d%d",&u,&v,&w,&c);
map[u].push_back(Edge(v,w,c));
}
if(Dijkstra()){
printf("%d\n",MIN);
}else
puts("-1");
}
return ;
}

poj 1724(有限制的最短路)的更多相关文章

  1. POJ 1724 (分层图最短路)

    ### POJ 1724 题目链接 ### 题目大意: 给你 N 个点 ,M 条有向路,走每条路需要花费 C 元,这段路的长度为 L . 给你 K 元,问你能否从 1 走到 N 点且花费不超过 K 元 ...

  2. POJ 1724 ROADS(bfs最短路)

    n个点m条边的有向图,每条边有距离跟花费两个参数,求1->n花费在K以内的最短路. 直接优先队列bfs暴力搞就行了,100*10000个状态而已.节点扩充的时候,dp[i][j]表示到达第i点花 ...

  3. POJ 1724 二维费用最短路

    题目大意:有N个城市,编号1-N有R条路,每条路(单向)的起点为Si,终点为Di,长度为Li,如果要走这条路需要花Ti的钱现在你只有K元钱,求在不超支的前提下,从1走到N需要的最短距离 这里总是希望路 ...

  4. 深搜+剪枝 POJ 1724 ROADS

    POJ 1724 ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12766   Accepted: 4722 D ...

  5. ROADS POJ - 1724 约束最短路 暴搜 加剪枝

    http://poj.org/problem?id=1724 题意:最短路的模板,不过每条边加上一个费用,要求总费用不超过k 题解:不能用dijkstra ,直接暴力,dfs维护len和cost. 普 ...

  6. 【poj 1724】 ROADS 最短路(dijkstra+优先队列)

    ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12436 Accepted: 4591 Description N ...

  7. ROADS POJ - 1724(分层最短路)

    就是在最短路的基础上   多加了一个时间的限制 , 多一个限制多一维就好了  记住 分层最短路要用dijistra !!! #include <iostream> #include < ...

  8. poj 1724(最短路+优先队列)

    ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13436   Accepted: 4921 Descriptio ...

  9. poj 1724 最短路+优先队列(两个约束条件)

    /*两个约束条件求最短路,用优先队列*/ #include<stdio.h> #include<string.h> #include<queue> using na ...

随机推荐

  1. lucene .NET 搜索图片 功能实现

    关于搜索部分 1想建立索引.构建jpg图片解析器,在索引时将jpg图片的exif信息及其文本信息如名称,存放路径,大小,日期等等加入索引!具体实现代码如下: public void BulidInde ...

  2. 47.MIF和COE文件格式

    .mif和.coe这两个文件分别是Quartus和ISE的RAM和ROM的初始化文件,因此了解他们的格式,是很必要的   MIF文件的格式如下:   WIDTH=14; --数据宽度为14位 DEPT ...

  3. 16位CPU多周期设计

    16位CPU多周期设计 这个工程完成了16位CPU的多周期设计,模块化设计,有包含必要的分析说明. 多周期CPU结构图 多周期CPU设计真值表 对应某一指令的情况,但仅当对应周期时才为对应的输出,不是 ...

  4. linux 编译C应用程序的Makefile

    CC=arm-linux-gcctarget=testsource=test.call: $(target)$(target): $(source) $(CC) -o $@  $<.PHONY: ...

  5. UISlider swift

    // // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...

  6. 状压DP

    今天稍微看了下状压DP,大概就是这样子的,最主要的就是位运算, i and (1<<k)=0 意味着i状态下没有 k : i and (1<<k)>0 意味着i状态下有 ...

  7. Haskell 趣学指南 入门笔记(二)

    显示类型声明,Haskell是不用定义类型的原因,很像python 想要确定某个表达式的类型 *Main> :t 'a' 'a' :: Char *Main> :t True True : ...

  8. 一次我们网站的web性能优化

    1.Google的Web优化最佳实践 利用PageSpeed工具 对我们红酒世界网进行检测时,发现了下面的几个问题 1.Leverage browser caching 1.1.通过web.confi ...

  9. asp.net webservice 返回json数据乱码解决方法

    [WebMethod] public void QueryRiskNotice(string phone) { try { var data = _riskNoticeDal.QueryRiskNot ...

  10. android讯飞语音开发常遇到的问题

    场景:android项目中共使用了3个语音组件:在线语音听写.离线语音合成.离线语音识别 11208:遇到这个错误,授权应用失败,先检查装机量(3台测试权限),以及appid的申请时间(35天期限), ...