BZOJ4337 [BJOI2015] 樹的同構 樹上雜湊
題目
題解
這道題讓我們把樹的結構歸類,自然而然就想到了雜湊,我們對這整顆樹雜湊一遍,然後判同構就只需要找雜湊值一樣的樹就可以了。
綜上所述,這是一道樹上雜湊模板題。
程式碼
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e3+10;
template<typename T>inline void read(T &x)
{
T s=0,f=1; static char ch=getchar();
while (!isdigit(ch) && ch^'-') ch=getchar();
if (!isdigit(ch)) { f=-1; ch=getchar(); }
while (isdigit(ch)) s=(s<<1)+(s<<3)+(ch^48), ch=getchar();
x=s*f;
}
ll ans[maxn][maxn],head[maxn],ver[maxn],Next[maxn],tot;
inline void add(int x,int y)
{
ver[++tot]=y,Next[tot]=head[x],head[x]=tot;
}
inline ll Hash(int x,int f)//樹雜湊
{
ll q[maxn],ans=maxn,top=0;
for (int i=head[x];i;i=Next[i])//遍歷所以子節點
if (ver[i]!=f)//不能再次遍歷以遍歷的點,即x的父親
q[++top]=Hash(ver[i],x);
sort(q+1,q+top+1);//把雜湊打得更亂
for (int i=1;i<=top;++i)//對x點計算雜湊值
ans=ans*2333+q[i];
return ans*2333+maxn+1;
}
int main()
{
static int m;read(m);
for(int i=1;i<=m;++i)
{
tot=0;
memset(head,0,sizeof(head));
static int n;read(n);
for (int j=1;j<=n;++j)
{
static int x;read(x);
if (x)
add(x,j),add(j,x);
}
for (int j=1;j<=n;++j)
ans[i][j]=Hash(j,0);//樹雜湊
sort(ans[i]+1,ans[i]+n+1);
for (int j=1,k=0;j<=i;++j)
{
while (k<=n)
if (ans[i][++k]!=ans[j][k]) break;//找同構
if (k>n)
{
printf("%d\n",j);
break;
}//找到同構就輸出
}
}
return 0;
}
相關文章
- BZOJ4337: BJOI2015 樹的同構(hash 樹同構)
- 樹雜湊
- 【資料結構】查詢結構(二叉排序樹、ALV樹、雜湊技術雜湊表)資料結構排序
- P5043 樹雜湊
- 樹的同構
- 雜湊,二叉樹,紅黑樹,B樹,B+樹,LSM樹等資料結構做索引比較二叉樹資料結構索引
- 模板口胡:樹同構
- Mysql InnoDB B+樹索引和雜湊索引的區別? MongoDB 為什麼使用B-樹?MySql索引MongoDB
- CF580E Kefa and Watch (線段樹維護雜湊)
- 淺談樹形結構的特性和應用(上):多叉樹,紅黑樹,堆,Trie樹,B樹,B+樹...
- Android技能樹 — 陣列,連結串列,雜湊表基礎小結Android陣列
- Day76.雜湊表、雜湊函式的構造 -資料結構函式資料結構
- 資料結構基礎 (程式碼效率優化, 線性表, 棧, 佇列, 陣列,字串,樹和二叉樹,雜湊表)資料結構優化佇列陣列字串二叉樹
- 樹上染色(樹形dp)
- 深入理解hashmap(三)雜湊表和二叉搜尋樹的恩怨情仇HashMap
- 樹上的等差數列 [樹形dp]
- Hash,雜湊,雜湊?
- 樹的學習——樹的儲存結構
- js 雜湊雜湊值的模組JS
- 資料結構之樹( 線段樹,字典樹)資料結構
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- Fiber 樹的構建
- DTOJ 樹的解構
- 資料結構——雜湊表資料結構
- 七夕也要學起來,雜湊雜湊雜湊!
- 資料結構的故事之二叉樹, 字首樹, N叉樹資料結構二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- [樹形dp][HAOI2015]樹上染色
- 紅黑樹,雜湊表...嘔心瀝血完成的幾種常見的符號表實現符號
- 資料結構(樹):二叉樹資料結構二叉樹
- 自動平衡二叉樹的構建-AVL樹二叉樹
- 安全的雜湊
- 樹結構的應用
- 樹的解構 題解
- 樹上詢問
- LCA + 樹上倍增
- 資料結構 - 雜湊表,初探資料結構
- 資料結構之「雜湊表」資料結構