看到題目完全不會做的樣子。為什麼是<=3b??這個3有什麼用?n才1000是不是可以動態規劃比如f[i][x]表示以i為根i在大小為x的塊中?然而轉移方程似乎比較複雜,應該是乙個分組揹包一樣的東西。關鍵是輸出分類方法,這怎麼輸出啊。。於是果斷翻題解。
意料之外情理之中。一遍dfs即可。注意到以x為根節點時,其兒子s,則子樹s中與s相連的節點的連通塊,如果要構成乙個省,既可以s作為省會還可以x作為省會。如果用s作為省會,那s的子樹
**還是很簡單的,如下(注意到**裡沒有無解的情況,因為b<=n所以顯然有解啊):
#include#include#include#define n 2005
using namespace std;
int n,m,tot,tp,cnt,fst[n],pnt[n],nxt[n],stk[n],a[n],c[n];
void add(int aa,int bb)
void dfs(int x,int fa)
} stk[++tp]=x;
}int main(){
scanf("%d%d",&n,&m); int i;
for (i=1; i
by lych
2015.12.1
bzoj1086 王室聯邦
給出一棵樹,求一種分塊方案,使得每個塊的大小 size in b,3b 每個塊還要選乙個省會,省會可以在塊外,但是省會到塊內任何乙個點路徑上的所有除了省會的點都必須屬於這個塊。n le 1000 一次dfs即可解決。做法如下 實現中有乙個問題,對於乙個兒子,它在棧中積累了不到 b 個點,而在下乙個搜...
bzoj 1086 王室聯邦
餘 人國的國王想重新編制他的國家。他想把他的國家劃分成若干個省,每個省都由他們王室聯邦的乙個成員來管理。他的國家有n個城市,編號為1.n。一些城市之間有道路相連,任意兩個不同的城市之間有且僅有一條直接或間接的道路。為了防止管理太過分散,每個省至少要有b個城市,為了能有效的管理,每個省最多只有3b個城...
BZOJ 1086 王室聯邦
思路 貪心,每次當儲存的兒子大於等於b時,分出乙個塊,這樣每次每個塊至多為2b,這樣剩下的沒有被分的塊小於b,可以加入任意乙個塊,都是合法的。1 include2 include3 include4 include5 include6 int tot,go 200005 first 200005 n...