給定無向圖的邊列表(以 0 0 結束),多組測試數據(以空行分隔,-1 -1 結束)。判斷圖是否為樹:連通且無環。輸出 Yes/No。
實際上,若無環且邊數 = 節點數 - 1,自動連通。但輸入可能不給出孤立節點,需用 Set 記錄出現過的節點。
int parent[100005], rnk[100005];
void init() { for (int i=1;i<100005;++i) parent[i]=i, rnk[i]=0; }
int find(int x) { return parent[x]==x?x:parent[x]=find(parent[x]); }
bool unite(int x, int y) {
x=find(x); y=find(y);
if (x==y) return false; // 成環
if (rnk[x]
set 或 unordered_set 記錄出現節點