HDU 6071 Lazy Running
来源:互联网 发布:php微信分销开源系统 编辑:程序博客网 时间:2024/05/28 05:17
题意: 给你一个由四个节点组成的环,求从节点2出发,回到节点2的不小于k的最短路。
思路:
取w=min(d1,2,d2,3),那么对于每一种方案,均可以通过往返跑w这条边使得距离增加2w。也就是说,如果存在距离为k的方案,那么必然存在距离为k+2w的方案。
设disi,j表示从起点出发到达i,距离模2w为j时的最短路,那么根据dis2,j解不等式即可得到最优路线。
时间复杂度O(wlogw)。
好困,代码没自己打
发现自己最短路还是不能灵活用
#include<bits/stdc++.h>using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define LL long long #define fi first #define se second #define mem(a,b) memset((a),(b),sizeof(a)) const int MAXN=4+3; const int MAXM=60000+3; struct Node { int p; LL dis; Node(int p, LL d):p(p), dis(d){} }; LL K, G[MAXN][MAXN], m, ans; bool vis[MAXN][MAXM]; LL dist[MAXN][MAXM];//从1开始到达i,模m等于j的最短路 void spfa(int s) { queue<Node> que; mem(vis, 0); mem(dist, 0x3f); que.push(Node(1, 0)); dist[1][0]=0; vis[1][0]=true; while(!que.empty()) { int u=que.front().p; LL now_dis=que.front().dis; vis[u][now_dis%m]=false; que.pop(); for(int i=-1;i<2;i+=2) { int v=(u+i+4)%4; LL next_dis=now_dis+G[u][v], next_m=next_dis%m; if(v==s)//形成环,更行答案 { if(next_dis<K) ans=min(ans, next_dis+((K-next_dis-1)/m+1)*m); else ans=min(ans, next_dis); } if(dist[v][next_m]>next_dis) { dist[v][next_m]=next_dis; if(!vis[v][next_m]) { que.push(Node(v, next_dis)); vis[v][next_m]=true; } } } } } int main() { int T_T; scanf("%d", &T_T); while(T_T--) { scanf("%lld", &K); for(int i=0;i<4;++i) { scanf("%lld", &G[i][(i+1)%4]); G[(i+1)%4][i]=G[i][(i+1)%4]; } m=2*min(G[1][0], G[1][2]);//最小环 ans=((K-1)/m+1)*m;//只使用最短的回路 spfa(1); printf("%lld\n", ans); } return 0; }
阅读全文
0 2
- HDU 6071 Lazy Running
- HDU 6071 Lazy Running
- HDU 6071 Lazy Running
- Hdu-6071 Lazy Running(trick最短路)
- Lazy Running HDU
- Lazy Running HDU
- hdoj 6071 Lazy Running
- HDU 6071 Lazy Running(同余+最短路)
- HDU 6071 Lazy Running(同余最短路)
- HDU 6071 Lazy Running 同余 + 最短路
- HDU 6071 Lazy Running(同余最短路)
- Hdu 6071 Lazy Running【同余最短路】
- HDU 6071 Lazy Running(模同余最短路)
- hdu 6071 Lazy Running(spfa+同余最短路)
- HDU 6071 Lazy Running (Dijstra, 2017 Multi-Univ Training Contest 4)
- hdu 6071 Lazy Running(优先队列+dijkstra)(2017 Multi-University Training Contest
- 2017多校第4场 HDU 6071 Lazy Running 同余最短路
- 2017多校四 1005题 hdu 6071 Lazy Running 同余类 最短路
- php &
- Shell常见命令实践
- CodeForces
- springBoot如何如何设置fileMazSize()
- ZOJ 1525 Air Raid (有向图最小路径覆盖 + 理解)
- HDU 6071 Lazy Running
- POJ 2409 Let it Bead(polya染色问题)
- 怎么对比出oracle两个数据库全表数据差异
- poj 2387 Til the Cows Come Home 最短路(贝尔曼,迪杰斯特拉,spfa)
- LeetCode: Add Two Numbers
- 教你如何解决VS2015的30天试用期已过即VS2015许可证已过期的问题
- 简单的背包问题
- 在按钮上实现字母的小写
- UVA10341 solve it 二分