SRM675 medium ShortestPathWithMagic(DP+Dijkstra)
来源:互联网 发布:日本福岛核事故知乎 编辑:程序博客网 时间:2024/05/13 08:56
题意:n个完全图,找出0到1的最短路,其中有k个魔法可以使用,每使用一个,当前道路的长度就会变为原来的一半。
分析:设每个点有k中状态,更新每一个状态的最小值。
代码:
#include <bits/stdc++.h>#include <queue>#include <string>#define LL long long#define FOR(i,x,y) for(int i = x;i < y;++ i)#define IFOR(i,x,y) for(int i = x;i > y;-- i)using namespace std;const int maxn = 55;const double inf = 1<<30;typedef pair<int,int> pii;struct Node{ double val; int id,w; Node() {} Node(double a,int b,int c) : val(a),id(b),w(c){} bool operator < (const Node& rhs) const{ if(val == rhs.val) return w > rhs.w; return val > rhs.val; }};double dp[maxn][maxn];bool vis[maxn][maxn];class ShortestPathWithMagic{ public : double getTime(vector <string> dist, int k){ int n = dist.size(); memset(vis,false,sizeof(vis)); priority_queue<Node> q; FOR(i,0,maxn) FOR(j,0,maxn) dp[i][j] = inf; dp[0][0] = 0; q.push(Node(dp[0][0],0,0)); while(!q.empty()){ Node u = q.top(); q.pop(); int id = u.id,w = u.w; if(vis[id][w]) continue; vis[id][w] = true; //printf("%f %d %d\n",dp[id][w],id,w); FOR(i,0,n){ if(i == id) continue; if(dp[i][w] > dp[id][w]+dist[i][id]-'0'){ dp[i][w] = dp[id][w]+dist[i][id]-'0'; //printf("%f %d %d\n",dp[i][w],i,w); q.push(Node(dp[i][w],i,w)); } if(w+1 <= k && dp[i][w+1] > dp[id][w]+(dist[i][id]-'0')/2.0){ dp[i][w+1] = dp[id][w]+(dist[i][id]-'0')/2.0; //printf("%f %d %d\n",dp[i][w+1],i,w+1); q.push(Node(dp[i][w+1],i,w+1)); } } //printf("\n\n"); } double ans = inf; FOR(i,0,k+1) ans = min(dp[1][i],ans); return ans; }}res;
0 0
- SRM675 medium ShortestPathWithMagic(DP+Dijkstra)
- SRM675(div2) Level Two ShortestPathWithMagic
- SRM675 div2 hard TreeAndPathLength2(DP)
- SRM675(div2) Level OneLengthUnitCalculator
- hdu3339(dijkstra+dp)
- hdu3339 dijkstra + dp
- LeetCode-53-Maximum Subarray(DP/分治)-Medium
- SRM 719 div1 Medium (树形dp)
- HDU 2851 dp 与 dijkstra
- [ZJOI2006物流运输]DP+Dijkstra
- Medium
- Medium
- UVA 11367 - Full Tank? dijkstra+DP
- uva 11367 dijkstra+dp状态压缩
- 1097: [POI2007]旅游景点atr dijkstra+状压dp
- HDU-4568 Hunter (Dijkstra&&状压DP)
- HackerRank Medium(30) Super Six Substrings DP+数学
- codeforces 802K Send the Fool Further! (medium) 树形dp
- Todd.log - a place to keep my thoughts on programming
- Android之ListView和ScrollView事件冲突
- Arrays.asList java.lang.UnsupportedOperationException 异常
- Linux下制作ubuntu系统的u盘启动版LiveCD和直接硬盘启动LiveCD
- 跟着源码看ArrayList、LinkedList、HashMap、HashSet的内部存储机制
- SRM675 medium ShortestPathWithMagic(DP+Dijkstra)
- 点击任意键关闭弹窗,阻止冒泡
- Logistic Regression
- JQueryMobile+融云webSDK创建的聊天室有多余空白
- 创建模式
- ==与===区别
- VirtualBox安装中遇到的问题
- IntelliJ IDEA 性能调整
- 关于SVN弹出“update change sets for svnstatussubscriber......”的处理