POJ3411--Paid Roads
来源:互联网 发布:淘宝代装修接活儿 编辑:程序博客网 时间:2024/05/21 09:26
题目大意:有n个城市,m条路,每条路有五个信息,出发城市a,达到城市b,如果之前到过城市c,那么这条路的费用就是p,否则费用为r。求从城市1到城市n的最小花费。
分析:直接暴力深搜。当然,要带上一些剪枝。首先是,可行性剪枝,对于一个路为m条的图,每个节点的到达次数的上限为m/2,否则就会进入一个循环圈(m=1时除外)。接着是最优化剪枝,如果当前的总花费比已经算出的最小花费还大,那么也可以剪掉。
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct Road { int a, b, c, p, r;}road[15];int n, m;int vis[15];int ans;void dfs(int x, int tot) { if(tot >= ans) return; if(x == n) { ans = tot; return; } for(int i = 0; i < m; i++) { int b = road[i].b; if(road[i].a == x && vis[b] <= 4) { vis[b]++; if(vis[road[i].c]) dfs(b, tot+road[i].p); else dfs(b, tot+road[i].r); vis[b]--; } }}int main() { while(~scanf("%d%d", &n, &m)) { for(int i = 0; i < m; i++) scanf("%d%d%d%d%d", &road[i].a, &road[i].b, &road[i].c, &road[i].p, &road[i].r); ans = 1<<30; memset(vis, 0, sizeof(vis)); vis[1] = 1; dfs(1, 0); if(ans == 1<<30) printf("impossible\n"); else printf("%d\n", ans); } return 0;}
0 0
- poj3411 Paid Roads
- POJ3411--Paid Roads
- poj3411 Paid Roads---dfs
- POJ3411 Paid Roads DFS
- POJ3411 Paid Roads
- POJ3411--Paid Roads
- POJ3411-Paid Roads
- POJ3411-Paid Roads
- POJ3411 Paid Roads 解题报告
- poj3411--Paid Roads(bfs+状压)
- 【POJ3411】-Paid Roads 搜索剪枝
- poj3411——Paid Roads
- poj3411 Paid Roads 状压+最短路
- 【搜索】poj3411 paid road
- Paid Roads
- pku 3411 Paid Roads
- Poj 3411 Paid Roads
- POJ 3411 Paid Roads
- sec-wiki
- HPU 2686--Matrix【最大费用最大流 && 经典建图】
- thinkphp U方法 跨入口生成连接
- PHP trigger_error() 函数
- hdoj 2036 改革春风吹满地
- POJ3411--Paid Roads
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- External Storage外部存储——SD卡
- Winform 中 treeview 多选
- Struts(13)验证框架
- sql用法
- JS动态修改页面EasyUI datebox不生效、EasyUI动态添加Class、EasyUI动态渲染解析解决方案
- 文章标题
- 转 9个基于java的搜索引擎框架