2015 測試賽 同構 hihoCoder

2022-05-11 19:04:29 字數 1071 閱讀 8277

時間限制:2000ms

單點時限:1000ms

記憶體限制:256mb

給定2個樹a和b,保證a的節點個數》=b的節點個數。

現在你需要對樹a的邊進行二染色。

乙個好的染色方案,指不存在乙個樹a中的連通塊,同時滿足以下2個條件

1. 其中只有同色的邊

2. 和b同構。兩個樹同構是指,存在乙個一一對映(既是單射又是滿射),將樹b的各節點對映到不同的樹a的節點,使得原來在樹b中相鄰的點,在對映後,仍相鄰。

問是否存在一種好的染色方案。

第一行乙個整數t (1<=t<=10),表示資料組數。

接下來是t組輸入資料,測試資料之間沒有空行。

每組資料格式如下:

第一行乙個整數n ,表示樹a的節點總數。

接下來n-1行,每行2個數a, b (1 <= a, b <= n)表示樹a的節點a和b之間有一條邊。

接下來一行,乙個整數m(1 <= m <= n),表示樹b的節點總數。

接下來m-1行,每行2個數a, b (1 <= a, b <= m)表示樹b的節點a和b之間有一條邊。

對每組資料,先輸出「case x: 」,x表示是第幾組資料,然後接「yes」/「no」,表示是否存在所求的染色方案。

小資料:1 <= n <= 20

大資料:1 <= n <= 1000000

無論如何染色,只要從a中挑一條邊就行了。

樣例輸入

1

31 2

2 32

1 2

樣例輸出

case 1: no

這樣。如果樹b的任意結構的深度超過2,那麼,交叉染色能在a中避免b的出現。 否則當b的深度不超過2,即是兩層的樹,那麼,只要當a中存在一點,它的度數為t1m>=t2m*2-1,就能得到與b相同染色的塊。

#include #include #include #include using namespace std;

const int n=1000010;

int t1[n],t2[n];

int main()

} return 0;

}

程式設計之美2015測試賽 題目1 同構

給定2個樹a和b,保證a的節點個數 b的節點個數。現在你需要對樹a的邊進行二染色。乙個好的染色方案,指不存在乙個樹a中的連通塊,同時滿足以下2個條件 1.其中只有同色的邊 2.和b同構。兩個樹同構是指,存在乙個一一對映 既是單射又是滿射 將樹b的各節點對映到不同的樹a的節點,使得原來在樹b中相鄰的點...

BJOI2015 樹的同構

bzoj 4337 傳送門 這道題很顯然是樹的雜湊裸題。有根樹的雜湊很簡單,把子節點雜湊值搞一搞 有各種搞法 就變成了本節點雜湊值。再用map存一下就ok了。但是這道題是無根樹,怎麼選乙個根開始深搜計算雜湊值呢?可以使用樹的重心。每棵樹最多有兩個重心,至少有乙個重心。我們新建乙個節點0。如果只有乙個...

4337 BJOI2015 樹的同構

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