【poj 1724】ROADS 题意&题解&代码(C++)
2016-04-07 08:49
465 查看
题目链接:
http://poj.org/problem?id=1724
题意:
给出总钱数 pay(题上的K) ,再给出总点数n,总边数m。
接下来输入m条边,每条边都是单向边,每条边有四个信息a,b,l,c。
表示从a到b有一条边长为l,过路费为c的边。
每过一条边都要交过路费,若当前总钱数小于过路费,则不能走,问从1走到n的最短路(距离最短,花费在总钱数以内)。
题解:
第一次写dijkstra,感觉很神奇,也不知道到底是不是,反正就这么叫了。。
参考博客:
/article/6666357.html
代码:
http://poj.org/problem?id=1724
题意:
给出总钱数 pay(题上的K) ,再给出总点数n,总边数m。
接下来输入m条边,每条边都是单向边,每条边有四个信息a,b,l,c。
表示从a到b有一条边长为l,过路费为c的边。
每过一条边都要交过路费,若当前总钱数小于过路费,则不能走,问从1走到n的最短路(距离最短,花费在总钱数以内)。
题解:
第一次写dijkstra,感觉很神奇,也不知道到底是不是,反正就这么叫了。。
参考博客:
/article/6666357.html
代码:
#include<iostream> #include<algorithm> #include<stdio.h> #include<queue> #include<vector> using namespace std; int pay,n,m; struct node{ int n;int d;int c; bool operator < (const struct node a) const { if (a.d == d) return a.c<c; return a.d<d; } }; struct edge{ int v;int d;int c; }; priority_queue<node>q; vector<edge>lin[110]; int dj() { while(!q.empty()) q.pop(); node st; st.n=1;st.c=0;st.d=0; q.push(st); while(!q.empty()) { node now=q.top();q.pop(); if (now.n==n) return now.d; for (int i=0;i<lin[now.n].size();i++) { node nex; nex.n=lin[now.n][i].v; nex.d=now.d+lin[now.n][i].d; nex.c=now.c+lin[now.n][i].c; if (nex.c<=pay) q.push(nex); } } return -1; } int main() { scanf("%d%d%d",&pay,&n,&m); for (int i=1;i<=m;i++) { int x,y,di,ci; scanf("%d%d%d%d",&x,&y,&di,&ci); edge xv; xv.v=y;xv.d=di;xv.c=ci; lin[x].push_back(xv); } printf("%d\n",dj()); }
相关文章推荐
- Java gc垃圾回收机制
- c++实验3-个人所得税计算器
- C++作业3
- C++作业3
- C++课堂实验3
- 《CheckboxDemo.java》
- php 两个数组函数自我理解
- Java静态代码分析工具——FindBugs插件的安装与使用
- 第三周第三题(2) 输出空心三角形
- myeclipse 常用快捷键
- c++实验2-分段函数求值
- C++实验3—个人所得税计算器
- 继续封装DBDA.php 加入ajax
- Python 学习笔记 迭代器和生成器
- java实现微博后台登录发送微博
- fixed和setprecision格式控制的函数使用
- 意图与逻辑 —— Python
- Java设计模式之一 单例设计模式
- c++第三次上机实验项目四
- algorithm@ Strongly Connected Component