bzoj 4337 樹的同構

2021-08-14 14:28:58 字數 918 閱讀 7379

傳送門~

樹同構模板題。

為了保險用了雙雜湊。

選了極其暴力的方法處理兩個重心的情況:對於每個重心分別求雜湊值然後取max。

雜湊的時候,每次將所有子節點的雜湊值排好序拿出來,然後看心情瞎搞,隨便乘一乘模一模,最後將根節點的雜湊值作為整棵樹的雜湊值。

**:

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct tree

void read()}}

int getu(int x,int fa)

if((n-siz)*2>n) flag=1;

if(!flag) u[++tot]=x;

return siz;

}void ha(int x,int fa)

if(!len) return ;

sort(w1[x]+1,w1[x]+len+1);

sort(w2[x]+1,w2[x]+len+1);

for(int i=1;i<=len;i++) h1[x]=(h1[x]*19260%817+w1[x][i]*17%233)%1777;

for(int i=1;i<=len;i++) h2[x]=(h2[x]*83374%294+w2[x][i]*40%332)%1443;

}void solve()

}bool

operator == (const tree p) const

}t[55];

int m;

int main()

return

0;}

4337 BJOI2015 樹的同構

題解 樹的同構的判定 有根樹從根開始進行樹hash 先把兒子的f進行排序 f i sum num i 我沒有仔細想這樣是不是樹是唯一的。反正過了 無根樹先找到重心再作為根 因為重心最多只有兩個,複雜度仍舊o n include using namespace std define rint regi...

樹 樹的同構

給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖1 圖2輸入給出2棵二叉樹樹的資訊。對於每棵樹,首先在一行中給出乙個非負整數n...

樹1 樹的同構

給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖1圖2 現給定兩棵樹,請你判斷它們是否是同構的。輸入給出2棵二叉樹樹的資訊。對...