hdu6071[最短路+解不等式] 2017多校4
求出所有,从2走到x所需的花费在对 t = 2*min(d1,2, d2,3) 模运算下, 所有剩余系的最短路即可(把一个点拆成 t 个点, 每个点代表一种剩余系), 知道了所有剩余系就可以凑出答案。
dis[ 2 ][ 0 ] 到 dis[ 2 ][ t - 1 ] 代表的即为对 t 取模的所有剩余系的最短路 。
假设任意路线走回 2 点的话费是 K0 , 那么必定存在一种 K0+ t 花费(在min(d1,2, d2,3) 来回跑一次)的方案, 那么就是用最短路解不等式了,有点线性规划的感觉。
/*hdu6071[最短路+同余优化] 2017多校4*/
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL, int> P;
int G[][];
int T, n, a, b, c, d;
LL cnt = ;
LL t, k, dis[][];
void init() {
memset(dis, 0x3f, sizeof(dis));
memset(G, , sizeof(G));
} priority_queue<P, vector<P>, greater<P> >pq;
void dij(int u) {
while (!pq.empty()) pq.pop();
pq.push(P(0LL, u));
while (!pq.empty()) {
LL w = pq.top().first;
int v = pq.top().second;
pq.pop();
if (w > dis[v][w % t]) continue;
for (int i = -; i < ; i += ) {
int nxtp = (((v + i) % ) == ? : (v + i) % );
LL nxtw = w + G[v][nxtp] ;
if (dis[nxtp][nxtw % t] > nxtw) {
dis[nxtp][nxtw % t] = nxtw;
//cnt++;
pq.push(P(nxtw, nxtp));
}
}
}
}
void solve() {
init();
LL ans = 0x3f3f3f3f3f3f3f3f;
scanf("%lld%d%d%d%d", &k, &a, &b, &c, &d);
G[][] = G[][] = a;
G[][] = G[][] = b;
G[][] = G[][] = c;
G[][] = G[][] = d;
t = * min(G[][], G[][]);
//printf("%.2f\n", (double)clock() / CLOCKS_PER_SEC );
dij();
//cout << cnt << endl,cnt=0;
//printf("%.2f\n", (double)clock() / CLOCKS_PER_SEC );
for (int i = ; i < t; i++) {
if (k <= dis[][i]) {
ans = min(dis[][i], ans);
}
else {
ans = min(ans, dis[][i] + ((k - dis[][i] + t - ) / t) * t);
}
}
printf("%lld\n", ans);
}
int main() {
scanf("%d", &T);
while (T--) solve();
return ;
}
hdu6071[最短路+解不等式] 2017多校4的更多相关文章
- 2017 多校5 hdu 6093 Rikka with Number
2017 多校5 Rikka with Number(数学 + 数位dp) 题意: 统计\([L,R]\)内 有多少数字 满足在某个\(d(d>=2)\)进制下是\(d\)的全排列的 \(1 & ...
- 2017 多校5 Rikka with String
2017 多校5 Rikka with String(ac自动机+dp) 题意: Yuta has \(n\) \(01\) strings \(s_i\), and he wants to know ...
- 2017 多校4 Wavel Sequence
2017 多校4 Wavel Sequence 题意: Formally, he defines a sequence \(a_1,a_2,...,a_n\) as ''wavel'' if and ...
- 2017 多校4 Security Check
2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...
- 2017 多校3 hdu 6061 RXD and functions
2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...
- 2017 多校2 hdu 6053 TrickGCD
2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...
- 2017 多校1 I Curse Myself
2017 多校2 I Curse Myself(第k小生成树) 题目: 给一张带权无向连通图,该图的任意一条边最多只会经过一个简单环,定义\(V(k)为第k小生成树的权值和\),求出\(\sum_{k ...
- hdu6136[模拟+优先队列] 2017多校8
有点麻烦.. /*hdu6136[模拟+优先队列] 2017多校8*/ #include <bits/stdc++.h> using namespace std; typedef long ...
- hdu6134[莫比乌斯反演] 2017多校8
/*hdu6134[莫比乌斯反演] 2017多校8*/ #include <bits/stdc++.h> using namespace std; typedef long long LL ...
随机推荐
- poj1717
两次记忆化搜索,第一次找最小的gap,第二次找最少的次数. #include <iostream> #include <cstdio> #include <cstring ...
- MFC U盘检测
WM_DEVICECHANGE消息 查阅MSDN得知: The framework calls this member function to notify an application or dev ...
- 洛谷 P1311 选择客栈
题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...
- 目后佐道IT教育:师资团队
高端技术顾问 1. leepoor 拥有12年的Web开发和架构经验,在阿里巴巴担任高级架构师,参与阿里巴巴基础技术平台开发和www.alibaba.com架构设计.擅长大型网站技术架构,工作中经常使 ...
- SpringMVC、Spring和Struts的区别
http://www.cnblogs.com/hhx626/p/6010293.html 导读:近期做到的项目中,用到的框架师SSM(SpringMVC+Spring+Mybatis),那么在这之前用 ...
- 多源最短路径floyd
#include<iostream> #define INF 105 using namespace std; int main() { ][],mark,x,y,g; while(cin ...
- Open Cascade:拓扑类型(Topo_DS)之间类型转换
TopoDS_Edge aEdge = TopoDS::Edge(myAISShape->Shape()); TopoDS_Wire S1_wire = static_cast(S1); // ...
- robotframework接口测试实例
*** Settings *** Library Collections Library RequestsLibrary *** Test Cases *** test Create Session ...
- Bootstrap历练实例:禁用的按钮
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- javascript(函数式编程思考) ---> Map-Filter-quicksort-Collatz序列-Flodl-Flodr
let add = x=>x+1; //Map :: ( a -> b) -> [a] -> [b] let Map = function(f,arr){ //闭包存储累积对象 ...