POJ 3414 Paid Roads(状态压缩最短路)
来源:互联网 发布:lca在线算法 编辑:程序博客网 时间:2024/06/06 17:42
题意:
求一条从1-N的最短路,当从点a到点b时有两个选择:
1.直接走过a, b, 消耗路费r
2.从a到b,当且仅当c也走过,在c处付路费min(p, r)
所以需要记录已经走过的顶点,判断是否需要在c处提前付路费
限制:
1 ≤ m, N ≤ 10,
0 ≤ Pi , Ri ≤ 100,
Pi ≤ Ri (1 ≤i ≤ m).
/*********************************************** * Author: fisty * Created Time: 2015-08-05 17:46:53 * File Name : poj3411.cpp *********************************************** */#include <iostream>#include <cstring>#include <deque>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <string>#include <vector>#include <cstdio>#include <bitset>#include <algorithm>using namespace std;#define Debug(x) cout << #x << " " << x <<endl#define Memset(x, a) memset(x, a, sizeof(x))const int INF = 0x3f3f3f3f;typedef long long LL;typedef pair<int, int> P;#define FOR(i, a, b) for(int i = a;i < b; i++)#define lson l, m, k<<1#define rson m+1, r, k<<1|1#define MAX_N 11int n, m;struct Rode{ int b, c, p, r; Rode(int b, int c, int p, int r):b(b), c(c), p(p), r(r) {}};struct State{ int u, cost, coverd; State(int u, int cost, int coverd):u(u), cost(cost), coverd(coverd) {} bool operator < (const State& e1) const { return e1.cost < cost; } };vector<Rode> G[MAX_N];priority_queue <State> que;int used[MAX_N][1<<MAX_N];void solve(){ Memset(used, 0); que.push(State(1, 0, 1<<1)); //开始顶点为1,花费为0,走过顶点1 State result(-1,-1,-1); while(que.size()){ State q = que.top(); que.pop(); if(used[q.u][q.coverd]) continue; used[q.u][q.coverd] = 1; if(q.u == n){ result = q; break; } vector<Rode>::iterator it; for(it = G[q.u].begin(); it != G[q.u].end(); ++it){ Rode e = *it; int cost = q.cost; if(q.coverd & (1 << e.c)){ cost += min(e.p, e.r); }else{ cost += e.r; } que.push(State(e.b, cost , q.coverd|(1<<e.b))); } } if(result.u == -1){ printf("impossible\n"); }else{ printf("%d\n", result.cost); }}int main() { //freopen("in.cpp", "r", stdin); //cin.tie(0); //ios::sync_with_stdio(false); while(~scanf("%d%d", &n, &m)){ int a, b, c, p, r; for(int i = 0;i < m; i++){ scanf("%d%d%d%d%d", &a, &b, &c, &p, &r); G[a].push_back(Rode(b, c, p, r)); } solve(); } return 0;}
0 0
- POJ 3414 Paid Roads(状态压缩最短路)
- POJ 3411 Paid Roads (最短路 + dp)
- Poj 3411 Paid Roads(最短路)
- poj 3411 Paid Roads dfs+状态压缩
- POJ - 3411 Paid Roads (状态压缩DP)
- poj3411 Paid Roads 状压+最短路
- POJ 3411-Paid Roads(状态压缩+dijkstra算法+floyd-warshall算法)
- Poj 3411 Paid Roads
- POJ 3411 Paid Roads
- poj 3411 Paid Roads
- POJ 3411 Paid Roads
- poj 3411 Paid Roads
- poj 3411 Paid Roads
- POJ 3411 - Paid Roads
- POJ-3411-Paid Roads
- POJ 3411 Paid Roads
- POJ 3411 Paid Roads
- POJ 3411--Paid Roads
- hdu 5353 Average(2015 Multi-University Training Contest 6)
- java解析txt文件
- zoj 1671 Walking Ant
- B - MZL's xor -水题-异或操作规律
- 通过JMX监控Zookeeper
- POJ 3414 Paid Roads(状态压缩最短路)
- [sublime]安装插件配置lua
- android Log.isLoggable方法的使用
- iOS多线程
- ionic 项目中使用ngCordova插件$cordovaCamera筛选手机图库图片显示出来并上传
- 文章标题
- HDOJ Kiki & Little Kiki 2 2276【位运算+矩阵快速幂】
- 手机网页摇一摇问题
- 关于坚持与凝聚力