poj 3411 1724
题目:http://poj.org/problem?id=3411
题意:n 个城市,m 条路,每条路都有两种情况的费用,一种是 在 b 城市付费 r,一种是提前在 c 城市付费 p 元,问从 1 到 n 最小的花费
思路:邻接表 + dfs
1 #include <stdio.h> 2 #include <iostream> 3 #include <string.h> 4 #include <algorithm> 5 #define N 20 6 #define inf 100000000 7 #define _clr(a,val) (memset(a,val,sizeof(a))) 8 9 using namespace std; 10 11 int vis[N]; 12 int head[N]; 13 struct node 14 { 15 int a,b,c,p,r; 16 int next; 17 }point[N]; 18 int n,m; 19 int minn; 20 void dfs(int x,int sum) 21 { 22 if(sum > minn || vis[x] > n) return; // 当一个节点被访问n次时,就没必要再访问了 23 if(x == n) 24 { 25 if(sum < minn) minn = sum; 26 return ; 27 } 28 int t = head[x]; 29 while(t != -1) 30 { 31 vis[point[t].b] ++; 32 if(vis[point[t].c] > 0) dfs(point[t].b,sum + point[t].p); 33 else dfs(point[t].b , point[t].r + sum); 34 vis[point[t].b] --; 35 t = point[t].next; 36 } 37 } 38 int main() 39 { 40 int i; 41 //freopen("data.txt","r",stdin); 42 while(scanf("%d%d",&n,&m) != EOF) 43 { 44 _clr(vis,0); 45 _clr(head,-1); 46 for(i = 0; i < m; i++) 47 { 48 scanf("%d%d%d%d%d",&point[i].a,&point[i].b,&point[i].c,&point[i].p,&point[i].r); 49 point[i].next = head[point[i].a]; 50 head[point[i].a] = i; 51 } 52 minn = inf; 53 vis[1] = 1; 54 dfs(1,0); 55 if(minn == inf) printf("impossible\n"); 56 else printf("%d\n",minn); 57 } 58 return 0; 59 }
题目:http://poj.org/problem?id=1724
题意:n个城市 m 条路,每条路有两个参数,一个是长度,一个是费用,给出Bob拥有的钱,问从1 到 n在 可以付的起费的情况下的做短路长度
思路:用优先队列保存加进来的点(在不超过 Bob最多钱的情况下),然后bfs当找到n时就输出并退出
1 #include <stdio.h> 2 #include <iostream> 3 #include <string.h> 4 #include <queue> 5 #include <algorithm> 6 #define N 10010 7 #define inf 100000000 8 #define _clr(a,val) (memset(a,val,sizeof(a))) 9 10 using namespace std; 11 12 struct node 13 { 14 int point; 15 int len; 16 int cost; 17 friend bool operator < (node a,node b) // 定义顺序 18 { 19 return a.len > b.len; 20 } 21 }; 22 struct tnode 23 { 24 int f,t,l,c; 25 int next; 26 }eage[N]; 27 int s,d,r; 28 int head[N]; 29 void bfs() 30 { 31 node tem; 32 int flag = 0; 33 tem.point = 1, tem.len = tem.cost = 0; 34 priority_queue<node>qu; 35 qu.push(tem); 36 while(!qu.empty()) 37 { 38 //cout<<"999\n"; 39 node temp = qu.top(); 40 qu.pop(); 41 if(temp.point == d) 42 { 43 printf("%d\n",temp.len); 44 flag = 1; 45 break; //找到了就输出并退出 46 } 47 int i = head[temp.point]; 48 while(i != -1) 49 { 50 node ttem; 51 ttem.point = eage[i].t, ttem.len = temp.len + eage[i].l, ttem.cost = temp.cost + eage[i].c; 52 if(ttem.cost <= s) 53 { 54 qu.push(ttem); 55 } 56 i = eage[i].next; 57 } 58 } 59 if(!flag) printf("-1\n"); 60 return ; 61 } 62 int main() 63 { 64 int i; 65 //freopen("data.txt","r",stdin); 66 while(scanf("%d%d%d",&s,&d,&r) != EOF) 67 { 68 _clr(head,-1); 69 for(i = 0; i < r; i++) 70 { 71 scanf("%d%d%d%d",&eage[i].f,&eage[i].t,&eage[i].l,&eage[i].c); 72 eage[i].next = head[eage[i].f], head[eage[i].f] = i; 73 } 74 bfs(); 75 } 76 return 0; 77 }
转载于:https://www.cnblogs.com/fxh19911107/archive/2012/08/07/2627187.html
poj 3411 1724相关推荐
- poj 3411(DFS多点访问)
题意:有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱.求的是最少要花多 ...
- poj 3411 Paid Roads (dfs)
题目链接 题意:有N个城市被M条道路连接起来了,每两个城市之间可能存在超过一条路,但是城市之间是单向连接的. 每条路是要花费的.每条路的花费可以选择两种方式:1:假如a城市到达b城市,如果之前经过了c ...
- POJ 3411 DFS
大致题意: 有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱.求的是最少 ...
- 《挑战程序设计竞赛(第2版)》习题册攻略
本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...
- poj 1724 有限制的最短距离(优先队列+链表)
题目链接:http://poj.org/problem?id=1724 题目大意:给你一个最大费用,让你在费用容许的范围内(情况下)求有源点到终点的最短距离,也就是一般的单源最小距离,不同之处在于加了 ...
- 【POJ - 1724 】ROADS (带限制的最短路 或 dfs 或 A*算法,双权值)
题干: N cities named with numbers 1 ... N are connected with one-way roads. Each road has two paramete ...
- POJ 1724 二维费用最短路
题目大意: 有N个城市,编号1-N 有R条路,每条路(单向)的起点为Si,终点为Di,长度为Li,如果要走这条路需要花Ti的钱 现在你只有K元钱,求在不超支的前提下,从1走到N需要的最短距离 这里总是 ...
- ROADS POJ - 1724(最短路+邻接表+dfs)
题意: N个城市,编号1到N.城市间有R条单向道路.有长度和过路费两个属性.Bob只有K块钱,他想从城市1走到城市N.问最短共需要走多长的路.如果到不了N,输出-1. 题目: N cities nam ...
- ROADS POJ - 1724(限制条件的最短路)【邻接表+深搜】
思路:先说下题意,题意第一行给了一个k,代表你有k的钱数,下一行有一个n,代表n个点,然后一个m,代表m条边,然后接下来m行,每行有四个数,分别代表起点.终点.路径长度和要花费的钱数,题目想问在花的钱 ...
最新文章
- 美妆彩妆宣传PPT模板
- Django中STATIC_URL、STATIC_ROOT、STATICFILES_DIRS 的区别关系
- 蚂蚁金服面试经历!临场发挥!
- 二级菜单HTML原理,CSS多级菜单的实例代码讲解
- C#——一个简单的文件管理器
- SQL分页查询的介绍以及好处~~
- 教你轻松构建基于 Serverless 架构的小程序
- 使用cmd命令创建maven(web)项目+项目转换成IDEA项目+项目打包+Jetty运行Web项目
- java.lang.IllegalStateException: Max number of active transactions reached:50
- ubuntu系统安装socket服务器,ubuntu 服务器安装socket需要安装啥
- 通过VBA实现FTP自动下载及关键字检索等功能
- MC9S中断函数编写
- 推荐几款免费的MacOS/MacBook pro/MacBook air读取NTFS格式磁盘软件(完全免费)
- mysql复制表结构(包括索引)
- [TEST123] Performance Test
- 自动连上dns服务器啥意思,自动分配DNS服务器和手动设置有什么区别
- 如何正确撰写sci论文中的作者信息
- 【算法笔记】莫队算法(基础莫队,带修莫队,回滚莫队,树上莫队,二次离线莫队)
- 直接在html打开ppt,无需频繁跳转 教你在PPT内直接看网页
- python库numpy使用技巧(一)——提取数组中非零元素
热门文章
- matlab 自动处理数据,Matlab Remote IPC自动化数据处理
- linux非权限安装bioperl,BioPerl安装指南:Unix/Linux/Windows下的安装
- php redis编程,php + redis 实现关注功能
- android高德地图自定义图层,自定义图层-Canvas
- android第三方代码,Android--第三方控件--okHttp(示例代码)
- 定时器和promise_分析 Promise 内部实现
- java 学生信息的增删改查_学生信息的增删改查(java)
- 基于FPGA的竞赛抢答器
- php上传图片类型代码,php 上传图片的代码
- 信用评分python_信用评分卡(python)