[Codeforces 639B] Bear and Forgotten Tree 3
阿新 • • 發佈:2018-10-04
!= 鏈接 std read () ble typename oid pac
[題目鏈接]
https://codeforces.com/problemset/problem/639/B
[算法]
當d > n - 1或h > n - 1時 , 無解
當2h < d時無解
當d = 1 , n不為2時 , 無解
否則 , 我們先構造一條長度為h的鏈 , 然後 , 將一條(d - h)的鏈接到根上 , 再將剩余節點接到根上
時間復雜度 : O(N)
[代碼]
#include<bits/stdc++.h> using namespacestd; template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); } template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); } template <typename T> inline void read(T &x) { T f = 1; x = 0; char c = getchar(); for (; !isdigit(c); c = getchar()) if(c == ‘-‘) f = -f; for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - ‘0‘; x *= f; } int main() { int n , h , d; read(n); read(d); read(h); if (d > n - 1 || h > n - 1) { printf("-1\n"); return0; } if (h * 2 < d) { printf("-1\n"); return 0; } if (d == 1 && n != 2) { printf("-1\n"); return 0; } for (int i = 2; i <= h + 1; i++) printf("%d %d\n",i,i - 1); for (int i = 1; i <= d - h; i++) { if (i == 1) printf("%d %d\n",1,h + 1 + i); else printf("%d %d\n",h + i,h + 1 + i); } if (d == h) { for (int i = d + 2; i <= n; i++) printf("%d %d\n",2,i); } else { for (int i = d + 2; i <= n; i++) printf("%d %d\n",1,i); } return 0; }
[Codeforces 639B] Bear and Forgotten Tree 3