博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pku 3411 Paid Roads DFS+灵活技巧卡节点访问次数
阅读量:5136 次
发布时间:2019-06-13

本文共 1744 字,大约阅读时间需要 5 分钟。

题意:

给出 n 个节点 m 条边,求从 1 到 n 的最小花费。有两种支付方式:

                   1> 预先在城市 Ci (必须先到过该城市)支付费用 Pi  ;

                   2> 在终点 Bi支付费用 Ri;

 思路:

这里给定的节点,边的数量都<=10爆搜没问题,关键注意一下几点:

1> 边有多条,不能用邻接矩阵计算,而要用邻接表(存在重边)。

 2> Pi 始终小于等于对应的 Ri。

3> 每个点可以走多次,边也可以走多次。

这里正常的搜索写法不会重复走一个点而这里当遇到需要提前支付的路并且支付点还没有访问过就必须返回去访问支付点,这里我们每次分返回到访问过的点时,是为了增加一个可行路而返回的所以每次返回就一定会增加一个节点,所以只要访问过n次后就没必要再访问了,因为此时要么已经到达终点,要么到达不了。

View Code
#include 
#include
#include
#include
#include
#define maxn 12using namespace std;const int inf = 0x7fffffff;int vt[maxn];struct node{ int v,r,p; int pos; node *next;}H[maxn + 10],*head[maxn];int t,ans;int n,m;//邻接表实现建图void insert(int u,int v,int c,int p,int r){ node *q = &H[t++]; q->v = v; q->pos = c; q->r = r; q->p = p; q->next = head[u]; head[u] = q;}void dfs(int pos,int sum){ if (pos == n) { if (sum < ans) ans = sum; return ; } node *q; for (q = head[pos]; q != NULL; q = q->next) { int v = q->v; if (vt[v] != n)//还没有访问N次 { int tmp = 0; if (vt[q->pos] != 0 && vt[q->pos] <= 10) tmp = q->p; else tmp = q->r;//寻则最优路 vt[v]++;//记住这里vt++一定要在tmp之后否则会影响。这里wa了一次 dfs(v,sum + tmp); vt[v]--; } }}int main(){ //freopen("d.txt","r",stdin); int i,a,b,c,r,p; scanf("%d%d",&n,&m); t = 0; ans = inf; for (i = 0; i < m; ++i) { scanf("%d%d%d%d%d",&a,&b,&c,&p,&r); insert(a,b,c,p,r); } memset(vt,0,sizeof(vt)); dfs(1,0); if (ans != inf) printf("%d\n",ans); else printf("impossible\n"); return 0;}

 

 

 

转载于:https://www.cnblogs.com/E-star/archive/2012/08/10/2633035.html

你可能感兴趣的文章
Attributes.Add用途与用法
查看>>
JavaScript面向对象初探——封装和继承
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
【概率】poj 2096:Collecting Bugs
查看>>
javascript 无限分类
查看>>
【自制插件】MMD4Maya
查看>>
解决linux服务器乱码
查看>>
mapbox.gl文字标注算法基本介绍
查看>>
【C++】异常简述(二):C++的异常处理机制
查看>>
web.config在哪里
查看>>
SQL Server 2000 版本支持的最大物理内存量
查看>>
spring IOC装配Bean(注解方式)
查看>>
FTP服务器的搭建和使用(centos7)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
MyEclipse搭建SSM框架(Spring+MyBatis+SpringMVC)
查看>>
kubernetes_book
查看>>
Linux下串口通信工具minicom的用法
查看>>
使用SWIG轻松编写Python扩展
查看>>
Redis 常用数据结构命令
查看>>