题意:给K个权值。给含有N个点,R条单向边的图。

每条边都有两个权值,其中一个路长,另外一个是附加权值。

要求路的附加权值之和不超过K的情况下求最短路。

思路:

自己的思路太狭隘,这题还是看了大牛的思路。

利用优先队列,在附加权值不超限的前提下,把每个点通向的点都走,每次找出路长最短的点,如果找到第N个点则算法结束。

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int k,n,r,ednum;
struct edge
{
int id,w,mon;
edge *next;
};
edge *adj[];
edge edges[];
struct st
{
int id,mon,w;
st(int a,int b,int c){id=a;mon=b;w=c;}
};
struct cmp
{
bool operator()(const st &a,const st &b)
{
return a.w>b.w;
}
};
inline void addEdge(int a,int b,int c,int d)
{
edge *aa;
aa = &edges[ednum];
ednum++;
aa->id=b;
aa->w=c;
aa->mon=d;
aa->next=adj[a];
adj[a]=aa;
}
int solve()
{
priority_queue<st,vector<st>,cmp>q;
for(edge *p=adj[];p;p=p->next)
{
if(p->mon<k)
{
st tmp(p->id,p->mon,p->w);
q.push(tmp);
}
}
while(!q.empty())
{
st tmp=q.top();
q.pop();
if(tmp.id==n)
return tmp.w;
for(edge *p=adj[tmp.id];p;p=p->next)
{
if(p->mon+tmp.mon<=k)
{
st ttmp(p->id,p->mon+tmp.mon,p->w+tmp.w);
q.push(ttmp);
}
}
}
return -;
}
int main()
{
int a,b,c,d;
// ok=0;
scanf("%d%d%d",&k,&n,&r);
for(int i=;i<=r;i++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
addEdge(a,b,c,d);
}
printf("%d\n",solve());
}

POJ 1724 【存在附加约束的最短路问题】【优先队列】的更多相关文章

  1. POJ 1062 【带约束的最短路问题】

    中文题题意不写. 建图: 我自己想到的建图方式是把每个物品看作两个点,编号分别是i和i+n,然后每个物品两个点之间边的权值是物品本身的价值.然后从第i个点往外连边,目标是可替代品顶点编号较小的点,权值 ...

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

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

  3. 深搜+剪枝 POJ 1724 ROADS

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

  4. POJ 1724 ROADS(使用邻接表和优先队列的BFS求解最短路问题)

    题目链接: https://cn.vjudge.net/problem/POJ-1724 N cities named with numbers 1 ... N are connected with ...

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

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

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

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

  7. POJ 1724 ROADS(BFS+优先队列)

    题目链接 题意 : 求从1城市到n城市的最短路.但是每条路有两个属性,一个是路长,一个是花费.要求在花费为K内,找到最短路. 思路 :这个题好像有很多种做法,我用了BFS+优先队列.崔老师真是千年不变 ...

  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. javaee 第五周作业

    一.Ajax技术 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. ...

  2. 如何修改站点url

    1.config目录下的config_global.php 文件,修改:$_config['cookie']['cookiedomain'] = '.xxxxx.com';2.config目录下的co ...

  3. mybatis获取存储过程返回结果

    获取存储过程返回结果 代码: // Map<String,Object> map = new HashMap<String,Object>(); map.put("i ...

  4. Linux-RedHat7.2 安装.net core2.0

    1.添加dotnet产品Feed sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'ech ...

  5. python day two

    今日内容: 1.常用数据类型及内置方法 2.文件处理 3.函数 列表类型: 定义: 在[]内,可以存放多个任意类型的值,并以逗号隔开. 一般用于存放学生的爱好,课堂的周期等等... 优先掌握的操作: ...

  6. Python虚拟环境 之 virtualenv 与 virtualenvwrapper

           在开发Python应用程序的时候,比如系统安装的Python3只有一个版本:3.6.所有第三方的包都会被 pip 安装到Python3的 site-packages 目录下. 如果我们要 ...

  7. C指针类型转换问题

    先看下面的代码: #include<stdio.h> int main () { int a; char *x; x = (char *) &a; a = 512; x[0] = ...

  8. java(List或Array数组)求交集、并集、差集, 泛型工具类

    业务需要求不同类型的交集.并集.差集为避免代码冗余编写工具类. 注:list 转数组需传入数组,如果将原数组传入将会改变原数组的值,同时泛型数组又不可以实例化,解决方案:Arrays.copyOf(n ...

  9. 02-Mysql中的运算符

    Mysql中运算符 1.算术运算符运算符 作用+   加法-    减法*    乘法/,DIV     除法,返回商%,MOD       除法,返回余数 mysql root@localhost: ...

  10. JS应用之正则表达式

    定义 正则表达式是用于匹配字符串中字符组合的模式. 创建正则表达式 两种方式: 1.new RegExp() let pattern1 = new RegExp('cat'); //第一个参数字符串 ...