1596 Usaco2008 Jan 電話網路

2022-02-06 03:21:42 字數 1251 閱讀 8326

farmer john決定為他的所有奶牛都配備手機,以此鼓勵她們互相交流。不過,為此fj必須在奶牛們居住的n(1 <= 

n <= 10,000)塊草地中選一些建上無線電通訊塔,來保證任意兩塊草地間都存在手機訊號。所有的n塊草地按1..n 

順次編號。 所有草地中只有n-1對是相鄰的,不過對任意兩塊草地a和b(1 <= a <= n; 1 <= b <= n; a != b),都

可以找到乙個以a開頭以b結尾的草地序列,並且序列中相鄰的編號所代表的草地相鄰。無線電通訊塔只能建在草地

上,一座塔的服務範圍為它所在的那塊草地,以及與那塊草地相鄰的所有草地。 請你幫fj計算一下,為了建立能

覆蓋到所有草地的通訊系統,他最少要建多少座無線電通訊塔。

* 第1行: 1個整數,n

* 第2..n行: 每行為2個用空格隔開的整數a、b,為兩塊相鄰草地的編號

* 第1行: 輸出1個整數,即fj最少建立無線電通訊塔的數目

51 3

5 24 3

3 5輸入說明:

farmer john的農場中有5塊草地:草地1和草地3相鄰,草地5和草地2、草地

4和草地3,草地3和草地5也是如此。更形象一些,草地間的位置關係大體如下:

(或是其他類似的形狀)

4 2

| |

1--3--5

2輸出說明:

fj可以選擇在草地2和草地3,或是草地3和草地5上建通訊塔。

貪心,如果這一點的兒子都沒有被選, 並且它父親沒被選,就選它父親

#include #include 

using

namespace

std;

#define n 10005

intn;

struct

edgeed[n*2

];int

head[n], cnt;

inline

int add(int x, int

y); head[x] =cnt;

}int ans = 0

;bool

mark[n];

void dfs(int x, int

fa)

if (fl == 0 and !mark[x] and !mark[fa]) ans++, mark[fa] = 1;}

intmain()

dfs(

1, 0

); cout

return0;

}

1596 Usaco2008 Jan 電話網路

farmer john決定為他的所有奶牛都配備手機,以此鼓勵她們互相交流。不過,為此fj必須在奶牛們居住的n 1 n 10,000 塊草地中選一些建上無線電通訊塔,來保證任意兩塊草地間都存在手機訊號。所有的n塊草地按1.n 順次編號。所有草地中只有n 1對是相鄰的,不過對任意兩塊草地a和b 1 a ...

Usaco2008 Mar 土地購買

此題依舊是斜率優化。感覺自己做斜率優化做瘋了 滑稽 還是與先前一樣弄出dp式 這裡要著重說明一下 這裡的x,y都已經是排過序並整理了的!我們先按照x為第一關鍵字,y為第二關鍵字來從小到大 both 排序。隨後,我們發現它的y不滿足單調性。所以我們應當將其轉換一下。這樣子,我們就可以斜率優化了。設k上...

Usaco2008 Jan 電話網路

一道比較神的樹形dp,恕我太菜,一開始想的是三維的。實際上並不需要三維,只需要用0,1,2表示即可 d p u 0 dp u 0 dp u 0 表示當前點不放,他的某乙個兒子覆蓋他的代價 d p u 1 dp u 1 dp u 1 表示當前點放,他的子樹也被覆蓋的代價 d p u 2 dp u 2 ...