傳送門~
樹同構模板題。
為了保險用了雙雜湊。
選了極其暴力的方法處理兩個重心的情況:對於每個重心分別求雜湊值然後取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棵二叉樹樹的資訊。對...