hdu 6010 路径交】的更多相关文章

hdu 6010 路径交(lca + 线段树) 题意: 给出一棵大小为\(n\)的树和\(m\)条路径,求第\(L\)条路径到第\(R\)条路径的交的路径的长度 思路: 本题的关键就是求路径交 假设存在两条路径(a,b),(c,d),那它们的交是怎样的呢 画图看看,分三种情况 1.路径不存在交集 2.(c,d)交(a,b)路径的一边(由lca(a,b)将路径划分成两部分,假设这里交在a的一侧) 3.(c,d)交(a,b)路径的两边 可以看出路径交若存在,这其两端点一定在lca(a,c),lca(…
这套题体验极差. PROBLEM 1001 - 小C的倍数问题 题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6108 (2017"百度之星"程序设计大赛 - 初赛(A) - 1001) 解 10进制下,各位数和是9的倍数的数能被9整除是因为 10^k-1=能被9整除 实质上就是10-1的因数有9 #include <iostream> #include <cstring> #include <cstdio…
区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 849    Accepted Submission(s): 377 Problem Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为li,ri. 它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大. 例如样例中,选择[2,5]…
傻逼题... 裸的树上路径交 两条树上的路径$[a,b]$和$[c,d]$有交,则有$lca(a,b)$在$[c,d]$上或$lca(c,d)$在$[a,b]$上. 其实只要深度大的$lca$在另一条链上就好了,所以设$x=lca(a,b)$深度较大. 充分性证明:$x$在$[c,d]$上,则$[a,b]$和$[c,d]$显然有交. 必要性证明:$x$不在$[c,d]$上,如果$[a,b]$上有点$y$与$[c,d]$有交,因为$lca(c,d)$深度较小,所以$y$的深度必定小于$x$,那么$…
[百度之星初赛A]路径交 Problem Description 给定一棵n个点的树,以及m条路径,每次询问第L条到第R条路径的交集部分的长度(如果一条边同时出现在2条路径上,那么它属于路径的交集). Input 第一行一个数n(n<=500,000) 接下来n-1行,每行三个数x,y,z,表示一条从x到y并且长度为z的边 第n+1行一个数m(m<=500,000) 接下来m行,每行两个数u,v,表示一条从u到v的路径 接下来一行一个数Q,表示询问次数(Q<=500,000) 接下来Q行…
$n \leq 500000$的树给$m \leq 500000$个路径,$q \leq 500000$个询问每次问一个区间的路径交. 路径交口诀:(前方高能) 判有交,此链有彼祖: 取其交,最深两两祖. 说成人话就是:判两条路径有没有交,只要一条链的lca在另一条链上就一定有交:取两条路径的交,把两条路径的端点两两求出四对lca,最深那两个就是路径交. 证明?我会还用口诀! 由于需要很多很多次查lca,这里用欧拉序+st表求.查区间路径交可以线段树也可以st表,毕竟重复的部分算两次没问题. /…
HDU 6116 路径计数 普通生成函数常用于处理组合问题,指数生成函数常用于处理排列问题. 考虑 对于 $ a $ 个 $ A $ 分为很多堆,这么分的方案数是 $ C_{a-1}^{i-1} $ 然后对于每一堆我们看成一个数来放,并且所有堆都这样做,这样的话总的方案数量是 $ \frac{(i+j+k+l)!}{i!j!k!l!} $ 就算所有一堆看成的数的排列是不存在相邻相等的,至少都有 $ n-i-j-k-l $ 对相邻的相同的数. 然后就可以容斥了,枚举 $ i+j+k+l $ 直接计…
[题目]2017"百度之星"程序设计大赛 - 初赛(A) [题意]给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度.n<=500000. [算法]线段树+RMQ-LCA+树链的交 [题解]树链的交:记一条链为(a1,b1),LCA为c1.另一条链为(a2,b2),LCA为c2.记a1a2,a1b2,b1a2,b1b2的LCA为d1,d2,d3,d4,按深度排序后得deep[d1]<=deep[d2]<=deep[d3]<=…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5700 [题目大意] 给出一个长度为n的数列和m个区间,现在求k个区间,使得他们的区间交内的数列项和最大. [题解] 将区间按照右端点为第一关键字排序, 那么在从后往前扫描的过程中,已经扫过的部分右端点一定大于当前 所以我们可以枚举区间交的右端点,找出第k小的左端点,来更新答案 因为右端点固定,因此左端点越小,答案一定越大, 所以枚举右端点不会遗漏答案. [代码] #include <cstdio…
区间交 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5700 Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为li,ri. 它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大. 例如样例中,选择[2,5]与[4,5]两个区间就可以啦. Input 多组测试数据 第一行三个数n,k,m(1≤n≤100000,1≤k≤m≤100000). 接下来一行n个数ai,表示lyk的数列(0≤ai≤10…