![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
树
文章平均质量分 67
1
幼儿园大哥~
笑口常开,好彩自然来
展开
-
Codeforces 1401 D
传送门题目大意给定一棵 nnn个节点,n−1n-1n−1 条边的树。你可以在每一条树上的边标上边权,使得:每个边权都为 正整数;这 n−1n-1n−1个边权的乘积等于kkk;边权为 111 的边的数量最少。定义 f(u,v)f(u,v)f(u,v) 表示节点uuu到节点 vvv的简单路径经过的边权总和。你的任务是让∑i=1n−1∑j=i+1nf(i,j)\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}{f(i,j)}∑i=1n−1∑j=i+1nf(i,j)最大。最终答案可能原创 2021-03-03 16:48:59 · 134 阅读 · 1 评论 -
POJ 2418 Hardwood Species(字典树||map)
字典树传送门题目大意给你很多个单词,要你统计单词出现的次数,最后按字典升序输出思路因为字典序的先序遍历是排序的,所以只需建好树后先序遍历一下树就可以满足题目要求的输出方式了。裸的Trie树,输出按字符串的字典序输出,所以插入的时候,把第一次出现的字符串暂时保存起来。以后排完序在查询输出即可字典树代码struct node{ int val; int child[130]; node(){ val=0; memset(child,0,sizeof child); }}tire[原创 2020-12-01 13:18:57 · 145 阅读 · 0 评论 -
HDU 5444Elven Postman(二叉树)
传送门题目大意给你一个序列,第一个数为二叉树根节点,之后每个数往上加节点,且保证左节点小于根节点,且保证右节点大于根节点。且每个节点最多有2个子节点。然后再查询位置,每往左找输出一个E,右找输出W。思路按照给定的序列建树查找即可代码int n;struct node{ int l; int r; int val;}tree[maxn];int tot;void init(int tot){ tree[tot].l=tree[tot].r=-1;}void build(in原创 2020-11-29 17:04:10 · 93 阅读 · 0 评论 -
HDU 1710 Binary Tree Traversals(二叉树遍历)
传送门题目大意根据给出的二叉树的前序遍历和中序遍历,求出后序遍历思路根据先序找到根,根据中序找到左右孩子代码int t1[1001],t2[1001];void find(int a,int b,int n,int flag){ if(n==1){ printf("%d ",t1[a]); return ; } else if(n<=0){ return ; } int i; for(i=0;t1[a]!=t2[b+i];i++) ;//找到根节点 find原创 2020-11-27 18:33:05 · 128 阅读 · 0 评论 -
HDU 3791 二叉搜索树
传送门题目大意判断两序列是否为同一二叉搜索树序列思路直接暴力找,如果这个数大于他就是左孩子,否则就是右孩子代码int main(){ char s[20]; int tree[550],tree1[550]; int n; while(cin>>n){ if(n==0)break; scanf("%s",s); memset(tree,-1,sizeof tree); for(int i=0;s[i];i++){ int c=s[i]-'0'; i原创 2020-11-27 13:54:25 · 81 阅读 · 0 评论 -
POJ 1577 Falling Leaves(二叉搜索树)
传送门题目大意构造一棵树,输出其先序遍历。根据字母表顺序,左子树上的任意结点字母都在根结点前面,而右子树上的任意结点字母都在根结点后面。其中输入数据很独特,首行把二叉树的所有叶子结点列出来组成一个字符串,然后从去掉叶子结点后所形成的新二叉树中再找叶子结点,再组成一个字符串,依次进行下去,直到剩下一个根结点为止。思路可以把输入数据保存在一个二维字符数组里面,然后建立一个结构体储存二叉树的结点与左右孩子信息。代码struct node{ char val; int l; int r;}tr原创 2020-12-01 15:50:08 · 173 阅读 · 1 评论