首页 > 其他分享 >【模板】树同构([BJOI2015]树的同构)

【模板】树同构([BJOI2015]树的同构)

时间:2024-07-03 14:54:14浏览次数:22  
标签:同构 括号 int BJOI2015 t1 55 fa 模板

  • 一段合法的括号序和一棵有根树唯一对应,具体而言,考虑生成括号序的过程,从根节点出发,遇到左括号就向下走一步,遇到右括号就向上走一步
  • 由于树上的一个节点可能有多个子节点,因此在不规定访问顺序的情况下,同一棵树有多种不同的括号序列
点击查看代码
#include <bits/stdc++.h>
using namespace std;
vector<int>a[55];
string f[55];
vector<string>c[55];
int n,ans[55];
struct t1
{
	string s;
	int id;
}t[55];
bool cmp(t1 a,t1 b)
{
	if(a.s!=b.s)
	{
		return a.s<b.s;
	}
	return a.id<b.id;
}
void dfs(int n1,int fa)
{
	c[n1].clear();
	for(int i=0;i<a[n1].size();i++)
	{
		if(a[n1][i]!=fa)
		{
			dfs(a[n1][i],n1);
			c[n1].push_back(f[a[n1][i]]);
		}
	}
	sort(c[n1].begin(),c[n1].end());
	f[n1]="(";
	for(int i=0;i<c[n1].size();i++)
	{
		f[n1]+=c[n1][i];
	}
	f[n1]+=")";
}
int main()
{
	int m;
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>n;
		for(int j=1;j<=n;j++)
		{
			a[j].clear();
		}
		for(int j=1;j<=n;j++)
		{
			int fa;
			cin>>fa;
			if(fa==0)
			{
				
			}
			else
			{
				a[fa].push_back(j);
				a[j].push_back(fa);
			}
		}
		t[i].id=i;
		for(int j=1;j<=n;j++)
		{
			dfs(j,0);
			if(t[i].s=="")
			{
				t[i].s=f[j];
			}
			t[i].s=min(t[i].s,f[j]);
		} 
	}
	sort(t+1,t+m+1,cmp);
	t[0].s="";
	for(int i=1;i<=m;i++)
	{
		if(t[i].s!=t[i-1].s)
		{
			ans[t[i].id]=t[i].id;
		}
		else
		{
			ans[t[i].id]=ans[t[i-1].id];
		}
	}
	for(int i=1;i<=m;i++)
	{
		cout<<ans[i]<<endl;
	}
	return 0;
}

标签:同构,括号,int,BJOI2015,t1,55,fa,模板
From: https://www.cnblogs.com/watersail/p/18281621

相关文章

  • django使用jinja2模板
    1.使用Django默认模板TEMPLATES=[{'BACKEND':'django.template.backends.django.DjangoTemplates','DIRS':[BASE_DIR/'templates'],#使用路径表达式'APP_DIRS':True,'OPTIO......
  • CMD模板
    @echooffcolor09title打开网络中心控制面板%窗口标题%@echo-------------------------------------------@echo-------------------------------------------@echo-------------------------------------------@echo--------------这里可以写中文-------------@ec......
  • P4097 【模板】李超线段树 / [HEOI2013] Segment
    P4097【模板】李超线段树/[HEOI2013]Segment前言李超线段树并不是一种新的线段树,而是对一类题维护最值的过程做了改进,使线段树仍然有不错的复杂度。引入简要题意实现两种操作:在区间\([x_0,y_0]\)上加入一条两端为\((x_0,y_0)\),\((x_1,y_1)\)的线段。查询下标\(k......
  • 解决Vue template模板中单一根元素
    引言错误的用法会导致页面加载空白<template><divid="1">内容1<div><divid="2">内容2<div></template>解决Vue模板中单一根元素要求的问题及原理解析在Vue.js开发中,单一根元素的要求是确保Vue能够有效地编译和渲染组件的重要规则之一。本文将深入探讨这一......
  • 10、 Django-模板-templates
     模板语法#模板中的变量语法:{{var}}如果变量不存在、则插入空字符串#方法不能有参数{{int}}{{str}}{{list}}{{list.0}}{{dict}}{{dict.a}}#dict['a']{{func}}#传递函数{{class_......
  • 算法题常见模板
    数据结构类数组(Array)双指针(TwoPointers)滑动窗口(SlidingWindow)前缀和(PrefixSum)链表(LinkedList)单链表反转(ReverseLinkedList)链表合并(MergeLinkedLists)链表环检测(CycleDetection)栈和队列(StackandQueue)栈的基本操作(Basi......
  • salesforce学习笔记(8)- 邮件模板
    1、背景最近有这样一个需求:有两个自定义对象A和B,两对象关系为Master(A)-Detail(B),A的详细页面有B的关联列表。现在,要求从A页面的活动(Activity)Tab下,使用标准的电子邮件功能进行邮件发送,邮件内容要求包含对象A中的字段数据和对象B中的字段数据,邮件发送或者抄送给固定的6个人。......
  • 一个项目学习Vue3---Vue模板方法
     内容资源下载:关注公众号(资小库),下载相关资源分析下面一段代码,学习模板方法的可能的知识<template><div><div>将下面的msg属性放到上面来:{{msg}}</div><divv-html="htmlMsg"></div><divv-bind="id">这个地方绑定了一个ID{{id}}</div>......
  • Go1.19革命:打造超效能站点模板爬虫
    目录项目介绍环境配置核心依赖库爬虫实现HTTP请求数据解析数据存储运行与测试代码详解注意事项项目介绍本文将介绍如何使用Go1.19实现一个简单的站点模板爬虫。这个爬虫将访问指定的网站,获取页面内容并解析需要的数据,最终将数据存储在本地文件中。此教程适合具有基本G......
  • html+css+js文章模板
    图片  源代码在图片后面,点赞加关注,谢谢......