給定一棵樹 (N≤1e5),判斷能否將頂點映射到兩行無限網格點上,使邊只在端點相交 (平面繪製)。輸出 Yes/No。
可繪製的樹必須可分解為:
不可繪製特徵:存在節點掛 ≥3 個非鏈分支,或主幹分支過於複雜。
is_leaf_chain[u]=true。這些是可直線繪製的「腿」。u,計算其鄰居中 非鏈**且**非父節點**的子樹數** cnt。
cnt ≥ 3 → 無解 (No)。vectorG[MAXN]; int deg[MAXN]; bool is_chain[MAXN]; void dfs_mark_chain(int u, int fa) { is_chain[u] = true; for (int v : G[u]) if (v != fa && deg[v] <= 2) dfs_mark_chain(v, u); } int main() { int n; scanf("%d", &n); for (int i=1;i = 2) // 粗略:非鏈且非葉 cnt++; } if (cnt >= 3) { ok = false; break; } } puts(ok ? "Yes" : "No"); return 0; }
CF 574E 是一道「樹的平面繪製可行性」構造性判斷題。核心在於識別「鏈」與「非鏈分支」,並限制非鏈分支數 ≤ 2。此類「幾何約束下的圖嵌入」問題常通過提取圖的骨架結構 (主幹、腿、葉) 轉化為組合條件判斷。