poj1724 ROADS 解题报告
来源:互联网 发布:北京seo公司 编辑:程序博客网 时间:2024/06/05 00:29
这题有很多种做法,我是无脑深搜 63MS
题意大致是 :
图中每条边有权值L,花费T。
给定最大花费K。
在K限定内求出从1—>N的最短路。
做法:
一个一个点搜,当前状态花费已超过K或累计距离一超过最优解,跳出
还有就是记录每个点搜到时的花费和距离 , 搜到这个点时,
如果累计花费超过 并且累计距离超过这个点的最优解,跳出
如果都小于 ,记录
#include<cstdio>#include<cstring>#include<iostream>using namespace std;struct node{int x,y,k,l,next;}a[21000]; int len,first[110];int K,n,Answer=99999999;int A[110],d[110];void ins( int x,int y,int k,int l ){len++;a[len].x=x; a[len].y=y; a[len].k=k; a[len].l=l;a[len].next = first[x]; first[x] = len;}void get_( int x,int l,int num ){if( num >= Answer || l<0 )return;if( x==n ){ Answer = min( Answer,num ); return ; }if( l <= d[x] && num >= A[x] )return;if( l >= d[x] && num <= A[x] ){ d[x] = l; A[x] = num; }for( int k=first[x];k;k=a[k].next ){int y=a[k].y;get_( y,l-a[k].l,num+a[k].k );}}int main(){memset( A,63,sizeof A );memset( d,0,sizeof d );memset( first,0,sizeof first ); len = 0;int i,j,m,k,x,y,l;scanf("%d%d%d",&K,&n,&m);for( i=1;i<=m;i++ ){scanf("%d%d%d%d",&x,&y,&k,&l);if( l>K )continue;ins( x,y,k,l );}get_( 1,K,0 );printf("%d\n",Answer);return 0;}
0 0
- poj1724 ROADS 解题报告
- POJ1724 ROADS 解题报告【最短路/SPFA】
- poj1724 openjudge1724 ROADS 解题记录
- poj1724 ROADS
- poj1724 - ROADS
- ROADS poj1724
- POJ1724--ROADS
- POJ1724 ROADS
- POJ1724-ROADS
- poj1724 ROADS
- poj1724 ROADS
- POJ1724 ROADS
- poj1724——ROADS
- poj1724 ROADS (spfa + A*)
- poj1724 roads(dfs)
- poj1724——ROADS
- 1251 Jungle Roads 解题报告
- 2421 Constructing Roads 解题报告
- 排序算法之冒泡排序
- VC++创建个性的对话框之MFC篇(转)
- ④--OC面向对象
- Java过滤特殊字符的正则表达式
- 微信营销怎样快速获取大量精准粉丝
- poj1724 ROADS 解题报告
- 计算机相关专业大学四年书籍推荐
- 通过kfed自动获取磁盘信息的小脚本
- activemq的三种基本通信方式总结
- Linux串口驱动分析read
- 教你写Android网络框架之基本架构
- 黑马程序员--Oracle学习_day03
- 字符串/字符数组转Base64编码
- 解决ajax跨域问题的实例