std::vector<int> tree[maxn]; int fa[maxn]; void dfs(int u,int father) { int len = tree[u].size(); for (int i = 0;i < len;i++) { int v = tree[u][i]; if ...
分类:
其他好文 时间:
2020-01-22 14:26:30
阅读次数:
46
//输入无根树的结点个数n。输入n-1条边(u, v),输入欲指定的根的编号root,建立以root为根的树 /*可变长数组 一个有maxn行 当时每行长度能够不同的数组 用于表示树中结点间的关系 */ #include<stdio.h> #include<stdlib.h> #include<st ...
分类:
其他好文 时间:
2017-04-18 15:35:58
阅读次数:
283
思路: 无根树转有根树 + 树形dp。 实现: ...
分类:
其他好文 时间:
2017-04-01 19:55:41
阅读次数:
134
紫书P352 无根树转有根树,如果节点数n<=10^6,那么邻接矩阵就见不了了。用vector数组,vector数组实际占用空间与n成正比。 p[root] = -1; 记得一定要v和父节点相等,如果忽略,就会引起无限递归。 ...
分类:
其他好文 时间:
2016-08-16 09:19:04
阅读次数:
363
紫书:P352#include #include #include using namespace std;int p[100];vector G[100]; //邻接表int n;void read_tree(){ int u,v; cin>>n; for(int i=0;i>...
分类:
其他好文 时间:
2015-11-29 19:26:22
阅读次数:
156
跟着机房的潮流学了点分治,发现这个东西其实还蛮好写的,学会思想,很容易YY出来。直接上习题。
POJ 1741 TREE
点分治的模板题,首先设点xx到当前子树跟rootroot的距离为gxg_x,则满足gx+gy≤kg_x+g_y \le k可以加进答案,但是注意如果x,yx,y在同一棵子树中,就要删去对答案的贡献,以为x,yx,y会在其所在的子树中在计算一次。注意无根树转有根树的过程,需要选...
分类:
其他好文 时间:
2015-06-17 21:40:08
阅读次数:
172
题目大意就是求树的最小结点集,树上的动态规划基础题,一次深搜就可以解决问题
代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace s...
分类:
其他好文 时间:
2015-05-27 10:22:51
阅读次数:
123
题目大意:给出一个无向图(树),要求你删除掉其中一个点,使剩下的点构成的子树中,节点数最大的那个值达到最小解题思路:因为给出的是一个无根树,第一个想法就是先把它转成有根树,将1当成根
设sum[i]为以i为根节点的子树有多少个节点,那么sum[1] - sum[i]就相当于是排除了i的所有子节点的另一棵子树的节点总数了
设dp[i]为去掉了i节点后的剩余节点所构成的子树的节点的最大值
那么dp...
分类:
其他好文 时间:
2015-05-14 08:43:29
阅读次数:
126
问题:输入一个结点的无根树的各条边,并指定一个根结点,要求把该树转化为有根树 测试oj:nyoj http://acm.nyist.net/JudgeOnline/problem.php?pid=20 当结点数很多时若用邻接矩阵存储图将占用很大的空间,此时可使用vector或邻接表存储,由于vect...
分类:
其他好文 时间:
2015-05-06 10:40:11
阅读次数:
119
1、无根树转有根树
#include
#include
#include
#include
#define LL long long
#define INF 0x7fffffff
#include
using namespace std;
const int maxn = 1000005;
int p[maxn];
int n;
int root;
vector G[maxn];
...
分类:
其他好文 时间:
2015-04-15 09:44:26
阅读次数:
156