hihocoder 1041 國慶出遊

2021-07-07 09:05:02 字數 1833 閱讀 1272

傳送門

描述 小hi和小ho準備國慶期間去a國旅遊。a國的城際交通比較有特色:它共有n座城市(編號1-n);城市之間恰好有n-1條公路相連,形成乙個樹形公路網。小hi計畫從a國首都(1號城市)出發,自駕遍歷所有城市,並且經過每一條公路恰好兩次——來回各一次——這樣公路兩旁的景色都不會錯過。

令小hi苦惱的是他的小夥伴小ho希望能以某種特定的順序遊歷其中m個城市。例如按3-2-5的順序遊歷這3座城市。(具體來講是要求:第一次到達3號城市比第一次到達2號城市早,並且第一次到達2號城市比第一次到達5號城市早)。

小hi想知道是否有一種自駕順序滿足小ho的要求。

輸入 輸入第一行是乙個整數t(1<=t<=20),代表測試資料的數量。

每組資料第一行是乙個整數n(1 <= n <= 100),代表城市數目。

之後n-1行每行兩個整數a和b (1 <= a, b <= n),表示ab之間有公路相連。

之後一行包含乙個整數m (1 <= m <= n)

最後一行包含m個整數,表示小ho希望的遊歷順序。

輸出 yes或者no,表示是否有一種自駕順序滿足小ho的要求。

樣例輸入

2 7

1 2

1 3

2 4

2 5

3 6

3 7

3 3 7 2

7 1 2

1 3

2 4

2 5

3 6

3 7

3 3 2 7

樣例輸出

yes

no第一次搞圖論和深搜方面的題目,這個題目困了自己兩天,看了別人的部落格,發現都是各種高大上看不懂,還是決定自己寫;終於還是做出來了,可能**不怎麼樣,但是被自己感動哭。

#include 

using

namespace

std;

typedef

long

long ll;

#define maxn 105

struct line

};bool f[maxn]; //乙個標記陣列,後面會用到

line adj[maxn]; //建立乙個鄰接鍊錶

void init()

}void add(int u,int v)

int flag = 0; //flag為最後判斷yes或no的標準

void dfs(line *u,line *v)

if(f[u->v]) return;//因為有特定訪問順序,如3,7,2,

//不能在7前面就訪問2

u->w++;//已訪問當前,則權加一

line *p;//對當前節點的所有可能到達的下乙個節點遞迴搜尋

for(p = adj[u->v].next; p != null; p = p->next)

}int main()

//下面注釋掉得**可以檢驗鄰接表的正確性

/* for(int i=1; i<=n; ++i) */

cin >> m;

memset(f,0,sizeof(f));

like[0] = 1;//like儲存題目中所給的序列,隱含從1號開始

for(int i = 1; i <= m; i++)

//每次都兩個兩個的dfs

for(int i = 0; i <= m-1; i++)

if(flag) cout

<< "yes"

<< endl;

else

cout

<< "no"

<< endl;

}return

0;}

hihoCoder 1041 國慶出遊

時間限制 1000ms 單點時限 1000ms 記憶體限制 256mb 小hi和小ho準備國慶期間去a國旅遊。a國的城際交通比較有特色 它共有n座城市 編號1 n 城市之間恰好有n 1條公路相連,形成乙個樹形公路網。小hi計畫從a國首都 1號城市 出發,自駕遍歷所有城市,並且經過每一條公路恰好兩次 ...

hihocoder 1041國慶出遊(搜尋)

小hi和小ho準備國慶期間去a國旅遊。a國的城際交通比較有特色 它共有n座城市 編號1 n 城市之間恰好有n 1條公路相連,形成乙個樹形公路網。小hi計畫從a國首都 1號城市 出發,自駕遍歷所有城市,並且經過每一條公路恰好兩次 來回各一次 這樣公路兩旁的景色都不會錯過。令小hi苦惱的是他的小夥伴小h...

1041 國慶出遊

時間限制 1000ms 單點時限 1000ms 記憶體限制 256mb 小hi和小ho準備國慶期間去a國旅遊。a國的城際交通比較有特色 它共有n座城市 編號1 n 城市之間恰好有n 1條公路相連,形成乙個樹形公路網。小hi計畫從a國首都 1號城市 出發,自駕遍歷所有城市,並且經過每一條公路恰好兩次 ...