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 ...
随机推荐
- 线程池 Threadlocal 使用注意
线程池中的线程是重复使用的,即一次使用完后,会被重新放回线程池,可被重新分配使用. 因此,ThreadLocal线程变量,如果保存的信息只是针对一次请求的,放回线程池之前需要清空这些Threadloc ...
- mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
解决方案如下:
- ABC3D创客项目:小风扇
风扇是我们纳凉的好帮手,然而大多的风扇都体积庞大不易携带.利用电池进行供电能让风扇变得更加便捷,下面我们利用电池供电的原理制作出一个风扇. 工作原理: 这个OK风扇的主要能源来自于后面的7号电池,风扇 ...
- iOS 随机数(Fixed)
ios 有如下三种随机数方法: 1. srand((unsigned)time(0)); //不加这句每次产生的随机数不变 int i = rand() % 5; 2. ...
- django 2.0 + pycharm2017 出现的问题
在创建完成app之后,在models文件里创建两个类:BlogType , Blog, 创建超级用户,注册admin,在登陆admin之后发现,发现 BlogType , Blog,并没有导入到adm ...
- python之道05
1.写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&q ...
- Java多线程编程核心(1)
Java多线程编程核心(1) 停止线程 本节主要讨论如何更好停止一个线程.停止线程意味着在线程处理完成任务之前放弃当前操作. 1.停不了的线程 可能大多数同学会使用interrupt()来停止线程,但 ...
- shell脚本,如何用shell打印金字塔
- ios之自定义导航栏上的返回按钮
导航栏的按钮,右边的按钮是可以自己随意添加的.但左边的返回按钮怎么定制?你会说,添加一个自己的按钮呗!你可以试试看,这样行不行. 正确的答案是重载UINavigationController类的pus ...
- javascript变量名命名规则
1. js变量名可以包含数字,字母,$及_,不能以数字开头. 2. js变量可以使用中文,但是最好不要这么命名,以避免不必要的麻烦.