jzoj4272-序章-弗兰德的秘密【树形dp】
正题
大意
两棵树,它们的相似值是它们留下最多的节点使它们的结构相同。求相似值。
这两颗树就是结构相同的,相似值是8。
解题思路
就是树形dp。可以用f[i][j]f[i][j]f[i][j]表示树1的第iii号节点和它的子树与树2的j" role="presentation" style="position: relative;">jjj号节点与它的子树的相似值,然后每个叶子节点的相似值就是1,然后每两个非子节点的相似值就是它们的子节点之间相互匹配的最大价值,由于数据较小所以我们可以O(5!)O(5!)O(5!)暴力枚举,时间复杂度O(n2×5!)O(n2×5!)O(n^2\times 5!)。
代码
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define MN 1001
using namespace std;
struct node{int to,next;
}a1[MN],a2[MN];
vector<int> s1[MN],s2[MN];
bool v[MN];
int f[MN][MN],n,x,y,m;
void zdfs(int k,int sum)
{if (k>=s1[x].size()){f[x][y]=max(f[x][y],sum);return;}zdfs(k+1,sum);bool pd=false;for (int i=0;i<s2[y].size();i++)if (!v[i]){pd=true;v[i]=true;//标记zdfs(k+1,sum+f[s1[x][k]][s2[y][i]]);//搜索下一个v[i]=false;//回溯}if (pd) f[x][y]=max(f[x][y],sum);
}
void dfs(int k)
{if (!s1[k].size()){for (int i=1;i<=m;i++)f[k][i]=1;//叶子节点相似值为1return;}for (int i=0;i<s1[k].size();i++)dfs(s1[k][i]);//dp子节点for (int i=1;i<=m;i++){if (!s2[i].size()) f[k][i]=1;//对面为叶子节点也是相似值为1else{x=k;y=i;zdfs(0,0);//暴力匹配f[k][i]++;//算上自己}}
}
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<n;i++){scanf("%d%d",&x,&y);s1[x].push_back(y);}for (int i=1;i<m;i++){scanf("%d%d",&x,&y);s2[x].push_back(y);}dfs(1);//dpprintf("%d",f[1][1]);
}
jzoj4272-序章-弗兰德的秘密【树形dp】相关推荐
- 布鲁斯的秘密-序章:我是布鲁斯
关于布鲁斯的推理小说–<布鲁斯的秘密>. 故事纯属虚构,如有雷同,还请不吝赐教. 作者:凌云 文章目录 序章 我是布鲁斯 序章 我是布鲁斯 布鲁斯是汤口镇有名的私家侦探,不仅如此,旁边的树 ...
- 0x54. 动态规划 - 树形DP(习题详解 × 12)
目录 0x54.1 树形DP Problem A. 没有上司的舞会 Problem B. 战略游戏 0x54.2 树上背包 Problem A. 选课 Problem B.[数据加强版]选课(树上背包 ...
- hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治的话,每次要做一次树形DP:但时间应该是 siz*m2 的.可以用 FWT 变成 siz*ml ...
- HDU - 5242 Game(树形dp+树链剖分/树上贪心+思维)
题目链接:点击查看 题目大意:给出一棵包含n个节点的树,每个节点都有一个权值,整棵树的根是点1,问从点1开始向下一直走到叶子节点,可以走k次,怎么样走权值和最大,每个节点被走过一次后权值会变为0 题目 ...
- leetcode 235. 二叉搜索树的最近公共祖先(Java版,树形dp套路)
题目 原题地址:leetcode 235. 二叉搜索树的最近公共祖先 说明: 所有节点的值都是唯一的. p.q 为不同节点且均存在于给定的二叉搜索树中. 题解 关于 树形dp 套路,可以参考我的另一篇 ...
- bzoj4472: [Jsoi2015]salesman(树形dp)
Description 某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇 之间都只有唯一的可能经过其它城镇的路线. 小T 可以准确地估计出在每个城镇停留的净收 益.这些净收 ...
- P1040,jzoj1167-加分二叉树【树形dp】
前言 没有SPJ坑了我好久qwq 正题 测试连接:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1040 大意 一颗二叉树的中序遍历 ...
- [XSY] 树与图(树形DP、生成函数、分治NTT、重链剖分)
树与图 如果真的在图上跑算法,那么光建图复杂度就O(n2logn)O(n^2logn)O(n2logn)了,这显然不可行.所以一定要把 在图上的操作 转换成 在树上的操作 在图上删去点u,相当于在树上 ...
- Codeforces 835 F Roads in the Kingdom(树形dp)
F. Roads in the Kingdom(树形dp) 题意: 给一张n个点n条边的无向带权图 定义不便利度为所有点对最短距离中的最大值 求出删一条边之后,保证图还连通时不便利度的最小值 $n & ...
最新文章
- 获取Linux/Unix文件系统信息
- 201521123016《Java程序设计》第12周学习总结
- php正则过滤html标签_空格_换行符的代码,php正则过滤html标签、空格、换行符的代码(附说明)_php技巧...
- EXCEL自定义的应用
- 前端学习 -- Css -- 字体分类
- vue 二维数组_最近研究Vue源码时我发现的一些好玩函数
- Python 命令行库的大乱
- 现代汉语常用汉字3500表
- C-Free注册码,密钥,到期解决办法
- wordpress插件-wordpress常用插件大全
- 把Date类型的Fri Feb 01 00:00:00 CST 2019转换成yyyy-MM-dd格式
- 4芯网线接法(电话线接网线水晶头)
- 再无风清扬,再有少年郎
- c语言 求单元格中间某段字符串,EXCEL怎么取单元格里面的的值的中间某些字符...
- 单片机list文件解析及 hardfalt问题定位
- Linux系统引导过程及排除启动故障
- xxljob从入门到精通-全网段最全解说
- Veusz教程(1)——导入数据
- 奇虎360_2017校园招聘笔试编程题第二题
- vue ui创建项目 连接断开(errno:-4058,syscall: ‘scandir‘,code:’ ENOENT’,path: ‘C: ....../locales)
热门文章
- 心动的本质是什么_《心动的信号3》:在“烟火气”里嗑糖,素人恋爱究竟有多上头?...
- android布局中画圆角矩形,Android 自定义View之圆角矩形轨迹图
- linux ll 转数组,List、Set、数组之间的转换
- 华为高性能服务器刀箱,云平台服务器刀箱
- 双路服务器只显示一半内存,双路服务器只显示一半内存
- 101. 对称二叉树023(BFS)
- java并发练习之快乐影院
- 队列的定义与操作-顺序存储,链式存储(C语言)
- [C++11]使用using和typedef给模板定义别名
- [Java基础]自动装箱和拆箱