NOIP模擬賽 拆網線

2022-05-24 13:57:08 字數 1078 閱讀 8348

企鵝國的網咖們之間由網線互相連線,形成一棵樹的結構。現在由於冬天到了,供暖部門缺少燃料,於是他們決定去拆一些網線來做燃料。但是現在有 \(k\) 只企鵝要上網和別人聯機遊戲,所以他們需要把這 \(k\) 只企鵝安排到不同的機房(兩隻企鵝在同乙個機房會吵架),然後拆掉一些網線,但是需要保證每只企鵝至少還能通過留下來的網線和至少另乙隻企鵝聯機遊戲。

所以他們想知道,最少需要保留多少根網線?

// 保留圖上 k 個點,總邊數最小,且最少兩個點之間聯通(保留的點沒有孤立點)

// 保證輸入資料是一顆樹

// 其實就是樹上二分圖匹配

# include # include # include # define maxn 100005

struct edgee[maxn<<1];

int hd[maxn], cnte;

int f[maxn][2]; // 是否包括當前節點的子樹中的最大兩兩匹配數

// 記匹配數為 sum

// sum * 2 >= k,ans = (k+1)/2

// sum * 2 < k,ans = sum + (k - sum*2)

void adde(int u, int v);

void dfs(int now, int fa);

int main()

dfs(1, 0);

sum = std::max(f[1][0], f[1][1]);

if(sum * 2 >= k)

else

} return 0;

}void dfs(int now, int fa)

dfs(e[i].v, now);

f[now][0] += f[e[i].v][1];

} for(int i = hd[now]; i; i = e[i].next)

f[now][1] = std::max(f[now][1], f[now][0] - f[e[i].v][1] + f[e[i].v][0] + 1); }}

void adde(int u, int v);

hd[u] = cnte;

}

noip模擬賽7 上網 線性dp

描述 假設有n個人要上網,卻只有1臺電腦可以上網。上網的時間是從1 szw 至 t szw szw是sxc,zsx,wl自創的時間單位,至於 szw怎麼換算成s,min或h,沒有人清楚。依次給出每個人在某個時間段內上網的快樂程度c 必須這個人在整個時間段內都在上網,才能獲得快樂程度c,否則,快樂程度...

noip模擬賽 密碼

表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...

NOIP模擬賽 老師

題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...