[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:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- 【bzoj1083】[SCOI2005]繁忙的都市
1083: [SCOI2005]繁忙的都市 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2424 Solved: 1591[Submit][Sta ...
- 2014蓝桥杯B组初赛试题《奇怪的分式》
题目描述: 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) ...
- JAVA环境安装配置
dk1.6 64位是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序. jdk1.6 64位安装教程 jdk1.6 64位JDK的安装路径:D:\Program Fi ...
- 3-No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案
转载:http://www.360doc.com/content/15/0316/15/9200790_455576135.shtml 由于我在配置安卓环境时也碰到了类似问题,用这篇博客解决了主要问题 ...
- java 实现mysql数据库备份
package com.itenp.gen.action; import java.io.BufferedReader; import java.io.FileInputStream; import ...
- scrapy设置代理
在爬取网站内容的时候,最常遇到的问题是:网站对IP有限制,会有防抓取功能,最好的办法就是IP轮换抓取(加代理) 下面来说一下Scrapy如何配置代理,进行抓取 1.在Scrapy工程下新建“middl ...
- linux蓝屏时间修改
setterm -blank 2 #/etc/profile里添加这样一句话,可以让屏幕2分钟后没有信号(蓝屏) setterm -blank 0 #/etc/profile里添加这样一句话, ...
- C语言多线程
http://www.cnblogs.com/lixiaohui-ambition/archive/2012/07/26/2610336.html
- Linq学习<二>
http://www.cnblogs.com/wyqlijin/archive/2011/02/25/1964934.html 这位仁兄写的比较高深,建议大家看看 一: 这一篇以一个数据类为例,操作数 ...
- Struts2 校验数据问题
我们会经常遇到一下问题,例如我在前端输入数据,把数据发送到和后台,我首先要校验这个数据, 比如说:前端必须输入一个日期类型的数据,后端才能正确接收,要是输入一个不是日期型的数据, 那么后端就要把数据打 ...