Vijos1683 有根树的同构问题
- 题目大意: 给出一堆树,求同构(拓扑结构相同)树的集合
- 思路: 一开始写了个前序求置换序列,然后对比后序是否相等,但wa了,还需要对子树进行排序输出其dfs序,但是直接输出按节点多少排序的序列太复杂,于是将一个节点的dfs抽象成\(()\),于是对树\(1 -> 2 , 1 -> 3\)输出的dfs序为\((()())\)
#include<bits/stdc++.h>
#define ll long long
#define FOR(i,n) for(int i =1; i <= n;++i )
#define FOR0(i,n) for(int i =0; i < n;++i )
#define inf 0x3f3f3f3f
using namespace std; int k,n;
int vis[110];
struct node{vector<int> son;int idx;node(){idx = 0;}
};
struct Tree{int root = 0;node nodes[110];string pre;int in[110];int cur = 1;int idx;string getPre(int root){
// if(!root) return ;
// getPre(nodes[root].l);
// getPre(nodes[root].r);string z[110];int idx = 0;for(auto i:nodes[root].son){z[++idx] = getPre(i);}sort(z+1,z+1+idx);for(int i=2;i<=idx;++i){z[1] = z[1]+z[i];}return '('+z[1]+')';}bool operator == (Tree const tr)const{int len = pre.size();FOR0(i,len){if(pre[i] != tr.pre[i]) return false;}return true;}
};
vector<Tree> ve;
int main(){cin >> k >> n;FOR(i,k){
// cout << i << endl;Tree cTree;int fr,to;FOR(j,n-1){cin >> fr >> to;
// if(cTree.nodes[fr].l == 0){
// cTree.nodes[fr].l = to;
// }else{
// int bro = cTree.nodes[fr].l;
// while(cTree.nodes[bro].r){
// bro = cTree.nodes[bro].r;
// }
// cTree.nodes[bro].r = to;
// }cTree.nodes[fr].son.push_back(to);cTree.nodes[to].idx = 1;}FOR(j,n){if(cTree.nodes[j].idx==0){cTree.root =j;break;}}cTree.cur = 1;cTree.pre = cTree.getPre(cTree.root);
// cTree.cur = 1;
// cTree.getIn(cTree.root);cTree.idx = i;ve.push_back(cTree);}for(int i=0;i<k;++i){if(vis[i]) continue;vis[i] = 1;cout << ve[i].idx;for(int j=i+1;j<k;++j){ if(i==j || vis[j]) continue;if(ve[i]==ve[j]){cout << '=' << ve[j].idx;vis[j] = 1;}}cout << endl;}for(int i=0;i<k;++i){if(!vis[i]) cout << endl << ve[i].idx ;}return 0;
}
思路来源,
思路来源2
转载于:https://www.cnblogs.com/xxrlz/p/11228221.html
Vijos1683 有根树的同构问题相关推荐
- 小H和游戏(无根树转有根树,思维)难度⭐⭐⭐★
链接:https://ac.nowcoder.com/acm/contest/5203/D 来源:牛客网 题目描述 小H正在玩一个战略类游戏,她可以操纵己方的飞机对敌国的N座城市(编号为1~N)进行轰 ...
- 表达式树amp;amp;无根树转化为有根树
//将无根树转化为有根树 vector<int>g[maxn]; void read-tree() { int u,v; scanf("%d",&n); for ...
- 生成函数Euler变换学习笔记(无标号有根树计数)
众所周知,对于有标号计数的指数型生成函数 f(x)f(x)f(x),将其任意地进行无顺序的组合,得到的生成函数是exp(f(x))exp(f(x))exp(f(x)). 而对于无标号计数的这样的组合, ...
- 【图数据挖掘】— 子图同构问题、单射函数和双射函数、同构(isomorphic)和同态(homomorphism)
子图同构问题 子图同构(Subgraph Isomorphism)是指在图论中,两个图之间是否存在一种关系,使得其中一个图的顶点集合和边集合可以通过对应的方式映射到另一个图的顶点集合和边集合上,且保持 ...
- 2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p
2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x ...
- 子图同构问题Ullmann 算法(二)
#目录索引 文章目录 **写在前面的话** **1.1背景知识** **1.2 数学定义和描述** **写在后面的话** 写在前面的话 以上的内容均出自这篇论文ullmann algorithm,所有 ...
- 子图同构问题与Ullmann Algorithm 算法(一)
目录索引 目录索引 写在前面的话 子图同构定义 子图同构的映射关系 Reference 写在后面的话 写在前面的话 谨以此片献给 my best love, grandpa. 时光匆匆流逝,我们永远无 ...
- 无根树转有根树的一般方法
紫书:P352 #include <iostream> #include <vector> #include <cstring> using namespace s ...
- 树哈希判断同构无根同构问题转有根同构问题
前言 判断无根的同构 利用重心作为根进行dfs处理 注意哈希的公式: f[fa]=∑f[son]*primesiz[fa] 这个东西好像也是千变万化 复杂度:nmlogn 代码 #include< ...
最新文章
- jqGrid编辑—公共规则【附视频、ppt、源码】
- MathType 在Word中的应用
- mysql数据库对象管理_MySQL管理与优化(15):优化数据库对象
- python爬虫动态加载_简单Python爬虫,动态加载问题
- 最新新游社iApp源码+后台对接的hybbs内核
- 树莓派实现SIM868 ppp拨号上网
- 用户编写的python程序、无需修改就可以_超星泛雅大学英语A(Ⅳ答案
- mysql支付成功订单数超过10_1.超时未支付订单处理
- 【手写简易版 vue3】究极长文详细讲解如何实现一个简易版 vue3
- django 标签verbatim的使用 200312
- 自制android摇一摇闹钟,摇一摇闹钟
- oracle em 监听,监听程序ORACLE_HOME是啥??我EM重置,这个不知道要填什么
- 强网杯2018_core
- kali安装burpsuite专业版
- SPP (Spatial Pyramid Pooling)
- 王爽汇编语言 实验10
- Python量化交易06——Fama-French三因子模型(Rmt,SMB,HML)
- 前端里的button怎么去除点击自带边框_自媒体人做视频时配音中的噪音如何用EQ和采样去除(详细介绍)...
- 计算机登录其他用户,限制用户登录到其他计算机
- 修改服务器系统显示logo,Win10修改开机LOGO界面样式怎么改?教你修改win10开机LOGO界面样式的方法...
热门文章
- http://demo.netfoucs.com/jianglonghuang/article/details/44888133
- 面向对象设计领域的OCP原则
- red hat DHCP服务器配置
- Python基础05-数据类型:列表list
- Observables简介以及它们与Promise有何不同
- 手动部署OpenStack环境(四:安装控制器必备软件)
- 关于get和post两种提交方式
- 浙江大学软件学院2020年保研上机模拟练习 7-2 Distance of Triples
- PAT(甲级)2018年冬季考试 7-4 Heap Paths(非递归与递归解法)
- 根据给定数据创建JSON并验证