cf 1051F 树+图】的更多相关文章

$des$给定一张 $n$ 个点 $m$ 条边的带权无向联通图,$q$ 次询问,每次询问 $u_i$ 到 $v_i$ 的最短路长度.$n,q <= 10^5, m - n <= 20$ $sol$首先随便搞一棵生成树,那么会有一些边不在生成树上.把这些边的端点标记为特殊点.对于一个询问,如果最短路只经过生成树上的边,就可以直接计算.否则一定经过了一个特殊点,可以枚举这个特殊点,然后更新答案 $code$ #include <bits/stdc++.h> using namespac…
题意:给定一张n个点,m条边的无向联通图,其中m-n<=20,共q次询问,每次询问求给定两点u,v间的最短路长度 第一眼看见这题的时候,以为有什么神奇的全图最短路算法,满心欢喜的去翻了题解,发现就四个字“树上套环”! 其实这题的提示很明显:m-n<=20! 这说明,如果我们对这个图做一次生成树,那么非树边最多只会有20条! 那么,我们在求任意两点间最短路时,可以分类讨论进行: ①:如果这两点间的最短路只经过树边,那么我们可以直接在树上预处理,利用lca(树上两点距离公式) ②:如果这两点间的最…
//用map映射TLE,字典树就AC了#include"cstdio" #include"set" using namespace std; ; ;//26个小写英文字母 struct node{ int val;//存放字符串的hash值 node* next[N]; }; node memory[MAXN]; int ant; node* root; node* create_tree() { node* p=&memory[ant++]; ;i<…
http://codeforces.com/problemset/problem/61/E 题意是求 i<j<k && a[i]>a[j]>a[k] 的对数 会树状数组求逆序数的话,这个推一下就能出结果: 做法: 1.离散化,由于a[i]能够达到1e9 2.插入a[i]的时候,记录x[i]=i-sum(a[i]); a[i]之前比a[i]大的有x[i]个 3.插入完毕后,求a[i] 之后比a[i]小的数的个数y[i] ans=segma(x[i]*y[i])   注…
A - Lake Counting POJ - 2386 最最最最最基础的dfs 挂这道题为了提高AC率(糖水不等式 B - Paint it really, really dark gray CodeForces - 717E dfs 待会写题解 C - New Year Transportation CodeForces - 500A 简单的模拟 D - Binary Tree Traversals HDU - 1710 给树的先序中序输出后序 贴下代码 #include <algorith…
题目描述 已知一有向图,构建该图对应的邻接表.邻接表包含数组和单链表两种数据结构,其中每个数组元素也是单链表的头结点,数组元素包含两个属性,属性一是顶点编号info,属性二是指针域next指向与它相连的顶点信息.单链表的每个结点也包含两个属性,属性一是顶点在数组的位置下标,属性二是指针域next指向下一个结点. 输入 第1行输入整数t,表示有t个图 第2行输入n和k,表示该图有n个顶点和k条弧. 第3行输入n个顶点. 第4行起输入k条弧的起点和终点,连续输入k行 以此类推输入下一个图 输出 输出…
题目描述 给定一颗二叉树的逻辑结构(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构 二叉树的每个结点都有一个权值,从根结点到每个叶子结点将形成一条路径,每条路径的权值等于路径上所有结点的权值和.编程求出二叉树的最大路径权值.如下图所示,共有4个叶子即有4条路径, 路径1权值=5 + 4 + 11 + 7 = 27          路径2权值=5 + 4 + 11 + 2 = 22 路径3权值=5 + 8 + 13 = 26            …
题目描述 计算一棵二叉树的带权路径总和,即求赫夫曼树的带权路径和. 已知一棵二叉树的叶子权值,该二叉树的带权案路径和APL等于叶子权值乘于根节点到叶子的分支数,然后求总和.如下图中,叶子都用大写字母表示,权值对应为:A-7,B-6,C-2,D-3 树的带权路径和 = 7*1 + 6*2 + 2*3 + 3*3 = 34 本题二叉树的创建参考前面的方法 输入 第一行输入一个整数t,表示有t个二叉树 第二行输入一棵二叉树的先序遍历结果,空树用字符‘0’表示,注意输入全是英文字母和0,其中大写字母表示…
$des$ 给定一棵 n 个节点的树,你可以进行 n ? 1 次操作,每次操作步骤如下:选择 u,v 两个度数为 1 的节点.将 u,v 之间的距离加到 ans 上.将 u 从树上删除.求一个操作序列使得 ans 最大. $sol$ 先把直径拿出来,将直径外的点一个一个的和直径中的某一个端点配对并删掉.最后再将直径删掉.这样就是对的.如果当前直径外已经没有点了,那么显然只能将直径的端点删掉.否则一定不会去删直径的端点.因为先删一个直径外的点再删直径端点一定是不劣于先删直径端点再删这个直径外的点的…
B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点,则至少有两棵子树: ⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树:⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A1,K2,…,Kn,An)其中:Ki(i=1,2,…,n)为关键码,且Ki<Ki+1,  Ai 为指向子树根结点的指针(i=0,1,…,n),且指针Ai-1 所指…