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上建通訊塔。
gold
黃學長的題解:
f[i][0]:以i為根的子樹中所有點均被覆蓋且草地i上無訊號塔所需的最小塔數(i被其兒子覆蓋)
f[i][1]:以i為根的子樹中所有點均被覆蓋且草地i上有訊號塔所需的最小塔數
f[i][2]:以i為根的子樹中除i點以外其餘點均被覆蓋所需的最小塔數
1個人理解很容易想到是樹形dp,然後對於乙個節點i,如果在它的上面建立無線電發射塔的話,那麼只需要考慮在他的兒子裡面取min即可;
2然後自然而然的想到要轉移i節點沒有建立發射塔的情況,那麼一種情況是它被它的兒子覆蓋,另一種是被他的父親覆蓋,
3對於被他的父親覆蓋這種情況,只需要對它的兒子沒有建立發射塔並被覆蓋的情況求和即可,
4 對於被他的兒子覆蓋這種情況,可以列舉他被某個兒子覆蓋,其他的兒子隨便取,這樣就好了。
1 #include2 #include3 #include4 #include5 #include6 #include7 #includeview code8 #include9 #include10 #include11 #include
12#define inf 100000000
13#define maxn 10005
14#define maxm 10000+5
15#define eps 1e-10
16#define ll long long
17#define for0(i,n) for(int i=0;i<=(n);i++)
18#define for1(i,n) for(int i=1;i<=(n);i++)
19#define for2(i,x,y) for(int i=(x);i<=(y);i++)
20#define for3(i,x,y) for(int i=(x);i>=(y);i--)
21#define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
22using
namespace
std;
23int tot,head[maxn],f[3
][maxn];
24struct
edgee[maxn*2
];27
intread()
30while(ch>='
0'&&ch<='9')
31return x*f;32}
33void insert(int u,int
v)36
void dp(int x,int
fa)47
for(int i=head[x];i;i=e[i].next)
52}
53int
main()
61 dp(1,0
);62 printf("
%d",min(f[0][1],f[1][1
]));
63return0;
64 }
by:也可以用貪心來做。。。。。。
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 ...