当前位置: 首页 > news >正文

团建--树+dfs

树是双向边,然后最长公共前缀,所以贪心只dfsa[i]==b[j]的

#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<int,int> PII;
int n,m;
int c[2*N];
int d[2*N]; 
vector<int> ma[2*N]; 
vector<int> mb[2*N];
bool va[2*N];
bool vb[2*N];
ll an;
void dfs(int a,int b,ll l)
{
	for(int i=0;i<ma[a].size();i++)
	{
		for(int j=0;j<mb[b].size();j++)
		{
			int xa=ma[a][i];
			int xb=mb[b][j];
			if(!va[xa]&&!vb[xb]&&c[xa]==d[xb])///双向边防止死循环 
			{
				va[xa]=true;
				vb[xb]=true;
				an=max(an,l+1);///an与匹配上的比 
				dfs(xa,xb,l+1);
				va[xa]=false;
				vb[xb]=false;///还原 
			}
		}
	}
}
int main()
{ 
 cin>>n>>m;
 for(int i=1;i<=n;i++) cin>>c[i];
 for(int i=1;i<=m;i++) cin>>d[i];
for(int i=0;i<n-1;i++) 
{
	int u,v;
	cin>>u>>v;
	ma[u].push_back(v);
	ma[v].push_back(u);
}
 for(int i=0;i<m-1;i++) 
{
	int u,v;
	cin>>u>>v;
	mb[u].push_back(v);
	mb[v].push_back(u);
}
va[1]=vb[1]=true;
if(c[0]==d[0])
{
	an=1;///重点--初始化为 1
	dfs(1,1,1);
	cout<<an;
}else cout<<0;
return 0;
}

http://www.dtcms.com/a/98657.html

相关文章:

  • MySQL的基础语法2(函数-字符串函数、数值函数、日期函数和流程函数 )
  • Linux之数据链路层
  • Vue 类与样式
  • 【数学建模】(启发式算法)模拟退火算法:原理、实现与应用
  • [c++项目]基于微服务的聊天室服务端测试
  • 基于ssm的课程辅助教学平台(全套)
  • 直流电机类型及其控制技术
  • 免费下载 | 2025年网络安全报告
  • libimobiledevice项目中各个库的作用
  • 【数据结构】二叉树的递归
  • 前端音频和视频上传预览功能的探索与总结
  • Linux 基本使用和 web 程序部署
  • 人生感悟8
  • 【测试】每日3道面试题 3/29
  • Advanced Renamer:批量文件重命名工具
  • Vue3组件事件用户信息卡练习
  • SOA、ESB与微服务:架构演进与对比分析
  • 【大前端系列20】JavaScript核心:项目实战从零构建任务管理系统
  • 深入解析 Vue Router 与钩子函数:从核心原理到最佳实践
  • ChemBioServer: 一个在线“药物发现/再利用”的平台
  • 人工智能安全:从技术防御到全球治理的多层次应对策略
  • Error in torch with streamlit
  • JavaWeb——案例(1/20)-准备工作(案例目标、环境搭建、三层架构搭建、规范要求)附带SQL脚本
  • c++ vs和g++下的string结构
  • 某大麦手机端-抢票
  • Mybatis_Plus中常用的IService方法
  • 图解AUTOSAR_SWS_SPIHandlerDriver
  • PyQt6实例_批量下载pdf工具_主线程启用线程池
  • 语音波形编码与参量编码 LPC 的性能分析
  • 开源项目 vue-element-admin本地启动教程