Andrew and Chemistry(树的同构)

题链

将一棵树转化为最小表示法,将此时的树哈希一下,同时用map进行标记,就可以判断树是否存在同构

#include <map>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <iostream>
#define scan(x) scanf("%d",&x)
#define scan2(x,y) scanf("%d%d",&x,&y)
using namespace std;
const int Max=1e5+10;
vector<int> a[Max];
map<int,map<int,int> >vis;
map<vector<int>,int>mat;
bool book[Max*100];
int cnt=0;
int dfs(int u,int fa){
if(vis[u][fa]) return vis[u][fa];
vector<int> tmp;
for(int i=0;i<a[u].size();i++)
if(a[u][i]!=fa)
tmp.push_back(dfs(a[u][i],u));
sort(tmp.begin(),tmp.end());
if(!mat[tmp]) mat[tmp]=++cnt;
return vis[u][fa]=mat[tmp];
}
int main()
{
int n,u,v,ans=0;
scan(n);
for(int i=1;i<n;i++){
scan2(u,v);
a[u].push_back(v);
a[v].push_back(u);
}
for(int i=1;i<=n;i++){
if(a[i].size()==4) continue;
v=dfs(i,0);
if(!book[v]) ans++;
book[v]=true;
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. LoadRunner ERROR: java.lang.NumberFormatException
  2. express 框架之session
  3. Linux Hackers/Suspicious Account Detection
  4. BC68(HD5606) 并查集+求集合元素
  5. JAVA获取当前系统时间System.currentTimeMillis()
  6. 嵌入式 十个最值得阅读学习的C开源项目代码
  7. Lucene.net项目研究说明
  8. 抛弃JQ,回归原生js……
  9. 求字符串空格、数字、字母个数--JAVA基础
  10. Linux驱动
  11. 分享一个可以把 iOS/Android 应用的下载链接合成一个二维码的工具
  12. Xamarin.Android 使用 Encoding.GetEncoding(&quot;GB2312&quot;) 报错解决方案
  13. appium 后台运行shell脚本
  14. Python3.6.2在线安装pymysql模块
  15. android -------- NDK 入门指南
  16. Linux TCP/IP调优-Linux内核参数注释
  17. 学习致用九---centos7.2+vim vundle
  18. PM_LOG
  19. libcurl HTTP POST请求向服务器发送json数据
  20. 从windows到linux的shell脚本编码和格式问题

热门文章

  1. POJ 3734 Blocks 矩阵递推
  2. 【409】Linux 系统 Testrun
  3. java笔记线程方式1获取对象名称
  4. bzoj 1629: [Usaco2007 Demo]Cow Acrobats【贪心+排序】
  5. 3-5 编程练习:jQuery实现简单的图片对应展示效果
  6. 51nod1459 迷宫游戏
  7. PLC学习资料
  8. python 模块-easygui.buttonbox
  9. Tornado引入静态css、js文件
  10. 【C++】智能指针简述(二):auto_ptr