TYVJ 1557 MST+LCA
分析:
可以证明,任意两点间的符合题目要求的路径必然是在MST上的。
有了这个,这题就水了。。。我没有想到,是venique神犇告诉我的
然后在MST上做LCA倍增,顺便维护d[i][j]表示i到他的2^j倍祖先的最大权,就好了~
我是蒟蒻。。LCA写萎了。。看了venique的代码,才发现错。。。
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <iostream> 6 7 #define N 110000 8 #define M 1000000 9 10 using namespace std; 11 12 struct KRU 13 { 14 int a,b,e,d; 15 }kru[M]; 16 17 int head[N],next[M],to[M],len[M],cnt,n,m,qu,f[N][22],d[N][22],fa[N],dpt[N],q[N]; 18 19 inline void add(int u,int v,int w) 20 { 21 to[cnt]=v; len[cnt]=w; next[cnt]=head[u]; head[u]=cnt++; 22 } 23 24 inline bool cmp(const KRU &a,const KRU &b) 25 { 26 return a.d<b.d; 27 } 28 29 void read() 30 { 31 memset(head,-1,sizeof head); cnt=0; 32 scanf("%d%d",&n,&m); 33 for(int i=1;i<=m;i++) scanf("%d%d%d",&kru[i].a,&kru[i].b,&kru[i].d); 34 } 35 36 int findfa(int x) 37 { 38 if(fa[x]!=x) fa[x]=findfa(fa[x]); 39 return fa[x]; 40 } 41 42 void kruskal() 43 { 44 sort(kru+1,kru+1+m,cmp); 45 for(int i=1;i<=n;i++) fa[i]=i; 46 int num=1; 47 for(int i=1;i<=m;i++) 48 if(findfa(kru[i].a)!=findfa(kru[i].b)) 49 { 50 fa[findfa(kru[i].a)]=findfa(kru[i].b); 51 num++; 52 add(kru[i].a,kru[i].b,kru[i].d); add(kru[i].b,kru[i].a,kru[i].d); 53 if(num==n) break; 54 } 55 } 56 57 void bfs() 58 { 59 int h=1,t=2,sta; 60 q[1]=1; dpt[1]=1; 61 while(h<t) 62 { 63 sta=q[h++]; 64 for(int i=head[sta];~i;i=next[i]) 65 if(to[i]!=f[sta][0]) 66 { 67 dpt[to[i]]=dpt[sta]+1; 68 f[to[i]][0]=sta; 69 d[to[i]][0]=len[i]; 70 q[t++]=to[i]; 71 } 72 } 73 } 74 75 void initlca() 76 { 77 for(int j=1;j<=20;j++) 78 for(int i=1;i<=n;i++) 79 { 80 d[i][j]=max(d[i][j-1],d[f[i][j-1]][j-1]); 81 f[i][j]=f[f[i][j-1]][j-1]; 82 } 83 } 84 85 int lca(int x,int y) 86 { 87 int rt=0; 88 if(dpt[x]<dpt[y]) swap(x,y); 89 for(int i=20;i>=0;i--) 90 if(dpt[f[x][i]]>=dpt[y]) 91 { 92 rt=max(rt,d[x][i]); 93 x=f[x][i]; 94 } 95 if(x==y) return rt; 96 for(int i=20;i>=0;i--) 97 if(f[x][i]!=f[y][i]) 98 { 99 rt=max(rt,max(d[x][i],d[y][i])); 100 x=f[x][i]; y=f[y][i]; 101 } 102 return max(rt,max(d[x][0],d[y][0])); 103 } 104 105 void go() 106 { 107 kruskal(); 108 bfs(); 109 initlca(); 110 scanf("%d",&qu); 111 int si=1,x,y,p1,p2,q1,q2; 112 for(int i=1;i<=qu;i++) 113 { 114 scanf("%d%d%d%d",&p1,&p2,&q1,&q2); 115 x=(long long)(si+p1)*p2%n+1; 116 y=(long long)(si+q1)*q2%n+1; 117 si=lca(x,y); 118 printf("%d\n",si); 119 } 120 } 121 122 int main() 123 { 124 read(); 125 go(); 126 return 0; 127 }
转载于:https://www.cnblogs.com/proverbs/archive/2012/10/29/2745501.html
TYVJ 1557 MST+LCA相关推荐
- Codevs 1519 过路费(Mst+Lca)
1519 过路费 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,-,n. ...
- [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
一开始觉得是网络流..仔细一看应该是最短路,再看数据范围..呵呵不会写...这道题是最大生成树+最近公共祖先.第一次写..表示各种乱.. 因为要求运输货物质量最大,所以路径一定是在最大生成树上的.然后 ...
- 【Codeforces】1051F. The Shortest Statement【MST+LCA+最短路】
F. The Shortest Statement [题目描述] 传送门 [题解] 题目也说了,重点是m-n<=20,我们就可以先跑最小生成树,最后剩下最多21条边,对着44个端点(包括起点和终 ...
- 比赛经验总结--187
cqround1 1.这次比赛160分 (1)反质数:60 (2)二分答案+2sat:验证: 0分 (3)树上LCA+推公式: 100分 2.总结:这次比赛第三题做起来非常顺,做过类似的题:奶牛大集 ...
- 【XSY2485】MST(最小生成树+倍增lca+并查集)
题面 Description 给定一个nnn个点mmm条边的连通图,保证没有自环和重边.对于每条边求出,在其他边权值不变的情况下,它能取的最大权值,使得这条边在连通图的所有最小生成树上.假如最大权值为 ...
- Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)...
转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图 ...
- szu 寒训 day#3 ST表 和 LCA问题 附例题 菜鸡解法
昨天我们讲述了树状数组今天我们来讲ST表(解决静态RMQ (Rang Minmum/Maximum Query)问题的数据结构) 假如说我们暴力去查询区间的最值得话每次操作都是O(n) 如果询问次数跟 ...
- 【最小生成树+LCA】Imperial roads
http://codeforces.com/gym/101889 I 先跑一遍最小生成树,把经过的边和答案记录下来 对于每个询问的边,显然如果处于MST中,答案不变 如果不在MST中,假设这条边连上了 ...
- CF E2 - Daleks' Invasion (medium) (LCA求两点树上路径上的最大边权)
http://codeforces.com/contest/1184/problem/E2 题意:给出一副图,首先求出这幅图的最小生成树 , 然后修改这幅图上不属于最小生成树的边权,使得修改后的图在求 ...
最新文章
- python安装后怎么配置环境变量_Python安装与环境变量的配置
- hive job oom
- VBA遍历文件夹下文件文件实用源码
- redis+aop防重复提交
- Boost:bzip2解压缩器
- python:else与循环语句联合用法
- 利用反射做类参数的校验
- 塔塔建网站服务器,塔塔帝国忘记哪个区怎么办
- mysql安装过程遇到的问题_个人在mysql安装过程中遇见的问题
- 蚂蚁员工人均都能买1套杭州的房子了?!好后悔,当初错失了蚂蚁...
- Genius‘s Gambit【学习进度条1】
- 【人工智能】Astar算法求解8数码问题(QDU)
- 成分句法分析与依存句法分析
- 《跑步该怎么跑》读书笔记
- 某地环境空气质量分析(1)
- Layui设置table指定行的背景色
- 《SQL必知必会》学习笔记——第十二课 连结表
- ipad iphone开发_如何在iPhone或iPad上“不信任”计算机
- 关于值班表的前端显示
- 面试:Handler内存泄露的原因是什么?
热门文章
- javase_03作业
- 15、解决14中csv用excel打开乱码的问题 open('zhihu.csv','w',newline='',encoding='utf-8-sig')...
- BZOJ1911:[Apio2010]特别行动队——题解
- Linux CentOS 修改服务器主机名hostname
- 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理
- 简单入门——深度学习笔记(Part II)
- maven编译不通过:软件包com.sun.org.apache.xml.internal.security.utils.Base64 不存在
- IOS Key-Value Observing (KVO)
- 北漂周记--第2记--培训开始
- (转载)NSOperation and NSOperationQueue教程(翻译)