题目链接[http://poj.org/problem?id=1741] 题意: 给出一颗树,然后寻找点对(u,v)&&dis[u][v] < k的对数. 题解: 这是一个很经典的树分治的题.假设我们选择了一个参考点u,那么对于不同的点对(u,v),(u , v)之间的路径有两种情况,经过点u,和不经过点u,加入我算出了没有经过点u的对数,然后把经过点u的加起来就是答案了,很简单,这就是分治的思想.具体看代码. #include<cstdio> #include<c…
Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 18205   Accepted: 5951 Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v)=The min distance between node u and v. Give an…
题意: 输入一个带权的无向连通图 定义以顶点\(u\)为根的最短路生成树为: 树上任何点\(v\)到\(u\)的距离都是原图最短的,如果有多条最短路,取字典序最小的那条. 然后询问生成树上恰好包含\(k\)个节点的简单路径的最长长度,以及最长的路径有多少条. 分析: 其实我们可以拆分成两个问题. 求出生成树 首先跑一遍SPFA,然后从根节点开始按照子节点的编号从小到大排序,如果这条边是最短的那么就加入到生成树中去. 求最长路径 这里也是很简单的树分治,最长路径无非就是经过重心 或者 在其他子树中…
因为该博客的两位作者瞎几把乱吹(" ̄︶ ̄)人( ̄︶ ̄")用彼此的智慧总结出了两条全新的定理(高度复杂度定理.特异根特异树定理),转载请务必说明出处.(逃 Pass:anuonei,anuonei(臭不要脸学血小板),真的是瞎几把乱搞,我感觉大部分人都不需要这些东西吧,当初研究是因为看不懂别人的博客……还有,有些性质在dalao们看起来是相当显然,但我们真的不懂啊,讨论到深更半夜的说.定理都非严格证明,因为我们有点困了(逃).其实都是闹着玩的,主要是自己开心兴奋自豪懂了就好啦,还望大家都…
思路:这题我是看 漆子超<分治算法在树的路径问题中的应用>写的. 附代码: #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<cmath> #define Maxn 10010 #define Maxm 20010 #define inf 0x7fffffff using namespace std; int head[…
题目大意: 树上找到有多少条路径的边权值和>=k 这里在树上进行点分治,需要找到重心保证自己的不会出现过于长的链来降低复杂度 #include <cstdio> #include <cstring> #include <iostream> #include <vector> #include <algorithm> using namespace std; #define N 10005 int n , m , k , first[N];…
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一棵有n个节点的树,每条边都有一个正权值,求一共有多少个点对使得它们之间路的权值和小于给定的k. 思路: <分治算法在树的路径问题中的应用> */ #include<stdio.h> #include<vector> #include<string.h> #include<algorithm> #define N 10050 using namespace std; struct edge{…
推荐YCB的总结 推荐你谷ysn等巨佬的详细题解 大致流程-- dfs求出当前树的重心 对当前树内经过重心的路径统计答案(一条路径由两条由重心到其它点的子路径合并而成) 容斥减去不合法情况(两条子路径在重心的子树内就已经相交) 删除重心(打上永久标记),对子树继续处理,转1 求重心是板子,算答案的方法要依题而定,一般都要容斥. 模板题洛谷传送门 calc函数中,头尾两个指针扫的计数方法也是一种套路 因为要sort,所以复杂度\(O(n\log^2n)\),不过蒟蒻实测你谷数据\(k\)不超过\(…
题意:给出一棵带边权树,询问有多少点对的距离小于等于\(k\) 本题解参考lyd的算法竞赛进阶指南,讲解的十分清晰,比网上那些讲的乱七八糟的好多了 不过写起来还是困难重重(史诗巨作 打完多校更详细做法 对于所有路径,以某个节点u来看分为两种情况 1.经过u的路径 2.不经过u的路径 能对答案有贡献的肯定是1类型,对2我们处理完1后递归求解 于是条件变为 以u为根的树中,其联通块中的点对符合 距离u之和小于等于k ① 且位于各不同的u的子树(u单独处理) ② 不妨先维护①再维护② 每一次选定根u后…
Give a tree with n vertices,each edge has a length(positive integer less than 1001).Define dist(u,v)=The min distance between node u and v.Give an integer k,for every pair (u,v) of vertices is called valid if and only if dist(u,v) not exceed k.Write…