---
# System prepended metadata

title: 題解

---

# 惱人的廣告
**首先，我們來弄清楚題目想要做什麼。**
**怒氣值請直接輸出不會，因為我氣量很大，而且就算遊戲下載下來玩的也不一樣。**
**如果你有~~Youtube Premium~~沒看過這廣告，那是你太盤🍽️**
**好啦反正就是遇到比自己小的數字就可以吃掉它讓自己變大**
**"從小走到大那條為正解"、"走法是隨機且不重複的"、"每個房間只能走一次"、"從1開始"、"房間內的數字都相異"在給定這些條件並要求"最多要走幾次"?**
* **"從小走到大那條為正解"** + **“走法是隨機且不重複的”** + **"“房間內的數字都相異""** = **有唯一解**
* **"最多要走幾次”** = **最後一次才走到正確的路(唯一)，也就是會走(總路徑數)次**
* **“每個房間只能走一次”** = **不會有"環"的情況發生**
* **“從1開始”** = **求第一個點DFS下去的路徑數**
****
:::spoiler **code**
```cpp=
#include<bits/stdc++.h>
#define endl '\n'
#define IO cin.tie(0) -> sync_with_stdio(0)
#define emp emplace_back
using namespace std;
typedef long long ll;

vector <vector<int> > Tu(100000+1);
bool vis[100000+1] = {false};
ll times = 0;

int DFS(int cur){
	vis[cur] = true;
	bool AllVisited = true;
	for (int i = 0; i < Tu[cur].size(); i++){
		if( !vis[ Tu[cur][i] ] ){
			AllVisited = false;
			DFS( Tu[cur][i] );
		}
	}
	if(AllVisited == true){
		times++;
	}
	vis[cur] = false;
}

int main(){
	int k , n , a , b;
	ll M;
	while(cin >> k >> n >> M){
		Tu.assign(k + 1, vector<int>() );
		memset(vis , 0 , sizeof(vis));
		times = 0;
		for(int i = 1 ; i <= n ; i++){
			cin >> a >> b;
			Tu[a].emp(b);
			Tu[b].emp(a);
		}
		DFS(1);
		cout << times << " 不會" << endl;
	}
}
```
:::
