我们先把两棵树的所有节点的儿子排序,然后dfs,记录访问的深度序列

然后可以发现题目中的两个操作都只会在深度序列中删掉一位,不会对其他位有影响(自己画画图就知道了)

对于一个深度序列$d_{1\cdots n}$,如果对任意$1\leq i\lt n$满足$d_i+1\geq d_{i+1}$,那么我们可以把这棵树的形态还原出来(直接模拟dfs的过程即可)

对于这道题,求出两棵树的深度序列之后,它们的LCS一定满足以上条件(如果有$d_i+1\lt d_{i+1}$,那么显然这两位中间还有点,也就是说这不是LCS),而注意到我们在原深度序列中删点可以得到这个LCS,所以LCS就是最终两棵树变到同一棵树时的深度序列

#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
vectorson1[5010],son2[5010];
int d1[5010],d2[5010],f[5010][5010],M;
void dfs(int x,int d,vector*son,int*p){
	M++;
	p[M]=d;
	for(int v:son[x])dfs(v,d+1,son,p);
}
int main(){
	int n1,n2,i,j;
	scanf("%d",&n1);
	for(i=2;i<=n1;i++){
		scanf("%d",&j);
		son1[j].push_back(i);
	}
	for(i=1;i<=n1;i++)sort(son1[i].begin(),son1[i].end());
	scanf("%d",&n2);
	for(i=2;i<=n2;i++){
		scanf("%d",&j);
		son2[j].push_back(i);
	}
	for(i=1;i<=n2;i++)sort(son2[i].begin(),son2[i].end());
	M=0;
	dfs(1,1,son1,d1);
	M=0;
	dfs(1,1,son2,d2);
	for(i=1;i<=n1;i++){
		for(j=1;j<=n2;j++){
			if(d1[i]==d2[j])
				f[i][j]=f[i-1][j-1]+1;
			else
				f[i][j]=max(f[i][j-1],f[i-1][j]);
		}
	}
	printf("%d",n1+n2-(f[n1][n2]<<1));
}

[Contest20180328]同构的更多相关文章

  1. [LeetCode] Isomorphic Strings 同构字符串

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  2. 60阶单群同构于A5的证明

    设$G$是$60$阶的单群,我们来证明他同构于$A_5$,一个比较直观地思路是考虑群表示$\phi:G\to S(\Sigma)$,由同态基本定理得到$$G/{\rm Ker}\phi \simeq ...

  3. 03-树1 树的同构 (C语言链表实现)

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h& ...

  4. PAT 03-树1 树的同构 (25分)

    给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子互换后 ...

  5. React同构直出原理浅析

    通常,当客户端请求一个包含React组件页面的时候,服务端首先响应输出这个页面,客户端和服务端有了第一次交互.然后,如果加载组件的过程需要向服务端发出Ajax请求等,客户端和服务端又进行了一次交互,这 ...

  6. BZOJ 4337: BJOI2015 树的同构 树hash

    4337: BJOI2015 树的同构 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4337 Description 树是一种很常见的数 ...

  7. SDUT 3340 数据结构实验之二叉树一:树的同构

    数据结构实验之二叉树一:树的同构 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 给定两棵树 ...

  8. react服务端/客户端,同构代码心得

    FKP-REST是一套全栈javascript框架   react服务端/客户端,同构代码心得 作者:webkixi react服务端/客户端,同构代码心得 服务端,客户端同构一套代码,大前端的梦想, ...

  9. [转] React同构思想

    React比较吸引我的地方在于其客户端-服务端同构特性,服务端-客户端可复用组件,本文来简单介绍下这一架构思想. 出于篇幅原因,本文不会介绍React基础,所以,如果你还不清楚React的state/ ...

随机推荐

  1. HttpClient测试类请求端和服务端即可能出现乱码的解决

    junit HttpClient 请求端 代码: package com.taotao.httpclient; import java.util.ArrayList; import java.util ...

  2. 数据结构&图论:K短路-可持久化可并堆

    本来A*就可以搞定的题,为了怕以后卡复杂度,找了个这么个方法 现阶段水平不够就不补充算法分析部分了 对于图G,建立一个以终点t为起点的最短路径构成的最短路径树 (就是反着跑一遍最短路,然后对于一个不为 ...

  3. [BZOJ3698]XWW的难题解题报告|上下界网络流|有源汇最大流

    XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核.XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩阵A,满足XW ...

  4. 【LibreOJ】【LOJ】#6217. 扑克牌

    [题意]给定一叠n张扑克牌和各自的ai,bi.每次可以从最上面拿走连续atop张并获得btop的价值,或是把top放到最底,求最大价值. [算法]背包DP [题解]本题最大的特点:atop的需求与牌的 ...

  5. 【洛谷 P1445】 [Violet]樱花(唯一分解定理)

    做了题还是忍不住要写一发题解,感觉楼下的不易懂啊. 本题解使用latex纯手写精心打造. 题意:求\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\)的正整数解总数. 首先 ...

  6. [bzoj3990][SDOI2015]排序-搜索

    Brief Description 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1<=i<= ...

  7. bootstrap-datetimepicker年视图中endDate设置之后比正常时间提前两个月

    问题 bootstrap-datetimepicker年视图中endDate设置结束时间为2016-08,(即8月之后的日期不能选)而在日历上显示时为2016-06,相差两个月,即6月之后的日期不能选 ...

  8. 编写类du命令Python脚本

    #!/usr/bin/env python #_*_ coding:utf-8 _*_ #计算整个目录的大小,脚本接受-H参数,来加上适当的单位 #功能像du看齐 import os,sys from ...

  9. python学习笔记 IO 文件读写

    读写文件是最常见的IO操作.python内置了读写文件的函数. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统完成的,现代操作系统不允许普通的程序直接对磁盘进行操作,所以, 读写 ...

  10. python基础===两个list合并成一个dict的方法

    def Run(): list2 = [, , , , ]; list3 = ["a", "b", "c", "d",& ...