poj 1724(有限制的最短路)
题目链接: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(有限制的最短路)的更多相关文章
- POJ 1724 (分层图最短路)
### POJ 1724 题目链接 ### 题目大意: 给你 N 个点 ,M 条有向路,走每条路需要花费 C 元,这段路的长度为 L . 给你 K 元,问你能否从 1 走到 N 点且花费不超过 K 元 ...
- POJ 1724 ROADS(bfs最短路)
n个点m条边的有向图,每条边有距离跟花费两个参数,求1->n花费在K以内的最短路. 直接优先队列bfs暴力搞就行了,100*10000个状态而已.节点扩充的时候,dp[i][j]表示到达第i点花 ...
- POJ 1724 二维费用最短路
题目大意:有N个城市,编号1-N有R条路,每条路(单向)的起点为Si,终点为Di,长度为Li,如果要走这条路需要花Ti的钱现在你只有K元钱,求在不超支的前提下,从1走到N需要的最短距离 这里总是希望路 ...
- 深搜+剪枝 POJ 1724 ROADS
POJ 1724 ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12766 Accepted: 4722 D ...
- ROADS POJ - 1724 约束最短路 暴搜 加剪枝
http://poj.org/problem?id=1724 题意:最短路的模板,不过每条边加上一个费用,要求总费用不超过k 题解:不能用dijkstra ,直接暴力,dfs维护len和cost. 普 ...
- 【poj 1724】 ROADS 最短路(dijkstra+优先队列)
ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12436 Accepted: 4591 Description N ...
- ROADS POJ - 1724(分层最短路)
就是在最短路的基础上 多加了一个时间的限制 , 多一个限制多一维就好了 记住 分层最短路要用dijistra !!! #include <iostream> #include < ...
- poj 1724(最短路+优先队列)
ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13436 Accepted: 4921 Descriptio ...
- poj 1724 最短路+优先队列(两个约束条件)
/*两个约束条件求最短路,用优先队列*/ #include<stdio.h> #include<string.h> #include<queue> using na ...
随机推荐
- C#中的索引
索引代码示例: 索引的使用示例: 索引在经过编译器编译之后就相当于一个属性,进一步的说就是两个方法. 一个类允许 ...
- 说明&总目录
1. 说明 1.1 这是一个乱七八糟的博客,包含遇到的各类问题,甚至会有奇♂怪的东西~ 1.2 作者目前本科生,懒虫一只,喜欢吃喝玩乐看动漫,更喜欢睡觉 1.3 文章难免有错,欢迎指出 1.4 语死早 ...
- Android Paint的使用以及方法介绍(附源码下载)
要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上.Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法如下: se ...
- Android -- 与WEB交互在同一个会话Session中通信
Session与Cookie Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力. Session可以用Cookie来实现, ...
- Linux查看端口使用状态及启动
LINUX网络性能之管理工具三剑客 本文是介绍管理Linux查看端口这些输出信息,该命令将显示从每个数据包传出的头和来自主机hostname对端口80的编址.Netstat -tln 命令是Linux ...
- 如何维护SSH安全
遇到两次,一次是公司服务器搭建好后,有人尝试ssh暴力破解,auth.log不停出现错误提示 还有买的米国vps,很荣幸地遭到来自波兰的ssh破解尝试 不得不重视ssh的安全 方法: 修改sshd_c ...
- Mac下安装及配置Eclipse
1.安装Eclipse前先确认你的Mac上是否已安装java运行环境.进入终端,输入”java -version”,如果返回了java版本号则说明已安装,否则,请先安装java运行环境: 2.访问ec ...
- Liferay IDE 3.1 M1发布啦
很嗨森,以后就再也不用SDK和下载.ivy啦 新增功能主要有: 1.Liferay Workspace(用来存放Liferay Module项目) 2. Liferay Gradle Module P ...
- Node.js 学习(二) 创建第一个应用
如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi. 从这个角度看,整个"接收 HTTP 请求并提供 ...
- SQL Server 中使用 convert 转换 datetime 格式示例
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE() ...