[BZOJ 5415] 归程
一棵KrusKal重构树,然而我数组开小了,忘记清空一个标记
洛谷传送门
BZOJ传送门 ......好像成权限题了Orz
回顾我们用KrusKal做生成树的时候,我们将边排序后连通各个连通块,那么边一定是单调的。
所以我们考虑维护一颗最大生成树,然后查询时倍增就好了,复杂度 n * log n
RE代码,把注释的删了就好了,数组没开够
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#include <cctype>
using namespace std;
, M = 1e6 + , inf = 0x7fffffff;
int v[M], to[M], head[N], pos[M], p;
void build(int a, int b, int c) { v[++ p] = b; to[p] = head[a]; head[a] = p; pos[p] = c; }
void link(int a, int b, int c) { build(a, b, c); build(b, a, c); }
int pre[N], far[N], n;
int find(int x) { return pre[x] == x ? x : pre[x] = find(pre[x]); }
struct point {
int d, f;
point (int d, int f) : d(d), f(f) {}
point () {}
bool operator < (const point &a) const {
return f > a.f;
}
};
priority_queue<point> tp;
void dijkstra() {
; i <= n; ++ i) far[i] = inf; tp.push(point(, ));
while( !tp.empty()) {
int u = tp.top().d; tp.pop();
for ( int i = head[u]; i; i = to[i]) if( far[v[i]] > far[u] + pos[i]) {
far[v[i]] = far[u] + pos[i]; tp.push(point(v[i], far[v[i]]));
}
}
}
], cnt;
int query(int a, int P) {
; i >= ; -- i) if( POS[T[a][i]] > P)
a = T[a][i];
return far[a];
}
struct node {
int u, v, val;
node ( int u, int v, int val) : u(u), v(v), val(val) {}
node () {}
bool operator < (const node &a) const {
return val > a.val;
}
}tc[M];
int lastans, Case, m, q, K, s;
inline void G(int &x) {
x = ; ; ;
) + (x << ) + (o & ); x *= f;
}
];
int main() {
freopen("return1.in", "r", stdin);
freopen("return.out", "w", stdout);
G(Case);
while( Case -- ) {
G(n), G(m);
; i <= n; ++ i) head[i] = ; // p = 0; // 当时好像是因为没加这个RE了.......
, a, b, c, d; i <= m; ++ i)
G(a), G(b), G(c), G(d), tc[i] = node(a, b, d), link(a, b, c);
sort(tc+, tc++m); dijkstra();
; i <= n; ++ i) pre[i] = i, POS[i] = inf;
cnt = n;
; i <= m; ++ i) {
if( find(tc[i].u) == find(tc[i].v)) continue;
int A = find(tc[i].u), B = find(tc[i].v);
++ cnt; POS[cnt] = tc[i].val; far[cnt] = min(far[A], far[B]);
T[A][] = T[B][] = cnt;
pre[cnt] = pre[A] = pre[B] = cnt;
}
T[cnt][] = T[cnt][] = cnt;
; i <= ; ++ i)
; k <= cnt; ++ k) T[k][i] = T[T[k][i-]][i-];
G(q); G(K); G(s);
cnt = lastans = ;
, v0, p0; i <= q; ++ i) {
G(v0); G(p0);
) % n + , p0 = (p0 + K * lastans) % (s + );
lastans = query(v0, p0); int t = lastans;
, t /= ; while( t);
'+TP[cnt]); puts("");
}
}
;
}
woc, 差点忘了这个

[BZOJ 5415] 归程的更多相关文章
- [LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程
[LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程 题意 给定一张无向图, 每条边有一个距离和一个高度. 再给定 \(q\) 组可能在线的询问, 每组询问给定一个点 ...
- 【刷题】BZOJ 5415 [Noi2018]归程
www.lydsy.com/JudgeOnline/upload/noi2018day1.pdf Solution 考试的时候打的可持久化并查集,没调出来QAQ 后面知道了kruskal重构树这个东西 ...
- [BZOJ] 5415: [Noi2018]归程
在做Kruskal求最小生成树时,假设要通过边权\(w\)的边合并子树\(x\)和\(y\),我们新建一个方点,把两个子树接到这个方点上,并将方点的点权赋为\(w\),最终形成的二叉树就是\(Krus ...
- BZOJ 5415: [Noi2018]归程(kruskal重构树)
解题思路 \(NOI2018\)的\(Day1\) \(T1\),当时打网络赛的时候不会做.学了一下\(kruskal\)重构树后发现问题迎刃而解了.根据\(kruskal\)的性质,如果要找从\(u ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- 使用RandomAccessFile读写数据
------------siwuxie095 工程名:TestRandomAccessFile 包名:com.siwuxie095.file 类名:MultiWriteFile.java(主类).Wr ...
- matplotlib的颜色和控制条
为了方便记忆,收藏备用 一 linestyle '-' solid line style '--' dashed line style '-.' dash-dot line style ':' dot ...
- 20169219 SQL注入实验报告
实验介绍 SQL注入技术是利用web应用程序和数据库服务器之间的接口来篡改网站内容的攻击技术.通过把SQL命令插入到Web表单提交框.输入域名框或页面请求框中,最终欺骗服务器执行恶意的SQL命令. 在 ...
- 【Android学习】自定义checkbox
1.1 自定义checkbox 选中图片 自定义checkbox使用的时android:background而不是android:button,原因在于使用button时自定义图片过大超出边缘部分会截 ...
- APP压力稳定性测试
转自:https://www.cnblogs.com/nuonuozhou/p/8643735.html 1.android系统自带monkey程序,模拟用户触摸屏幕,滑动track ball,按键等 ...
- Hacker News排名算法工作原理
这篇文章我要向大家介绍Hacker News网站的文章排名算法工作原理,以及如何在自己的应用里使用这种算法,这个算法非常简单,但却在突出热门文章和遴选新文章上表现的非常优秀.本质上,这段Hacker ...
- Unity5.5.2 CD旋转 顺时针逆时针
UGUI 下 Sprite_CD 在Inspector下 Image(Script) 下 Clock wise 勾选 决定 CD是顺时针还是逆时针 默认是顺时针 勾选则为逆时针
- ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来
一个挺有意思的项目,跟拼图一样的创建网站,先来几张GIF感受一下: 官方地址:http://www.zkea.net/zkeacms 下载地址:https://github.com/SeriaWei/ ...
- linux 建议锁和强制锁
作为APUE 14.3节的参考 linux是有强制锁的,但是默认不开启.想让linux支持强制性锁,不但在mount的时候需要加上-o mand,而且对要加锁的文件也需要设置相关权限. . ...
- 快速了解“云原生”(Cloud Native)和前端开发的技术结合点
欢迎访问网易云社区,了解更多网易技术产品运营经验. 后端视角,结合点就是通过前端流控缓解后端的压力,提升系统响应能力. 从一般意义理解,Cloud Native 是后端应用的事情,要搞的是系统解耦.横 ...