P1273 有線電視網(樹上dp)

2021-09-27 04:40:48 字數 1831 閱讀 9438

某收費有線電視網計畫轉播一場重要的足球比賽。他們的轉播網和使用者終端構成一棵樹狀結構,這棵樹的根結點位於足球比賽的現場,樹葉為各個使用者終端,其他中轉站為該樹的內部節點。

從轉播站到轉播站以及從轉播站到所有使用者終端的訊號傳輸費用都是已知的,一場轉播的總費用等於傳輸訊號的費用總和。

現在每個使用者都準備了一筆費用想**這場精彩的足球比賽,有線電視網有權決定給哪些使用者提供訊號而不給哪些使用者提供訊號。

寫乙個程式找出乙個方案使得有線電視網在不虧本的情況下使**轉播的使用者盡可能多。

輸入格式

輸入檔案的第一行包含兩個用空格隔開的整數n和m,其中2≤n≤3000,1≤m≤n-1,n為整個有線電視網的結點總數,m為使用者終端的數量。

第乙個轉播站即樹的根結點編號為1,其他的轉播站編號為2到n-m,使用者終端編號為n-m+1到n。

接下來的n-m行每行表示—個轉播站的資料,第i+1行表示第i個轉播站的資料,其格式如下:

k a1 c1 a2 c2 … ak ck

k表示該轉播站下接k個結點(轉播站或使用者),每個結點對應一對整數a與c,a表示結點編號,c表示從當前轉播站傳輸訊號到結點a的費用。最後一行依次表示所有使用者為**比賽而準備支付的錢數。

輸出格式

輸出檔案僅一行,包含乙個整數,表示上述問題所要求的最大使用者數。

輸入輸出樣例

輸入 #1 複製

5 32 2 2 5 3

2 3 2 4 3

3 4 2

輸出 #1 複製

2說明/提示

樣例解釋

如圖所示,共有五個結點。結點①為根結點,即現場直播站,②為乙個中轉站,③④⑤為使用者端,共m個,編號從n-m+1到n,他們為**比賽分別準備的錢數為3、4、2,從結點①可以傳送訊號到結點②,費用為2,也可以傳送訊號到結點⑤,費用為3(第二行資料所示),從結點②可以傳輸訊號到結點③,費用為2。也可傳輸訊號到結點④,費用為3(第三行資料所示),如果要讓所有使用者(③④⑤)都能看上比賽,則訊號傳輸的總費用為:

2+3+2+3=10,大於使用者願意支付的總費用3+4+2=9,有線電視網就虧本了,而只讓③④兩個使用者看比賽就不虧本了。

都在**裡了

**:

#includeusing namespace std;

const int maxn = 5000;

int head[maxn],cnt=0;

int val[maxn];

int dp[maxn][maxn];//dp[i][j]表示i節點,選j個使用者,能得到的錢的最大值

struct nodeedge[maxn*maxn];

int n,m;

int read()

while ('0'<=ch && ch<='9')

return x*f;

}void addedge(int u,int v,int w)

int dfs(int u)

int sum = 0,t;

for(int k=head[u];k;k=edge[k].next)

}} }

return sum;

}int main()

memset(dp,~0x3f,sizeof(dp));

n=read(),m=read();

for(int u=1;u<=n-m;u++)

}for(int i=n-m+1;i<=n;i++) val[i]=read();

for (int i=1;i<=n;i++) dp[i][0]=0;

dfs(1);

for (int i=m;i>=1;i--)

if (dp[1][i]>=0)

return 0;

}

P1273 有線電視網 樹上揹包

樹上揹包看作分組揹包就好了,收益臨時變成負數也是可以的,並且收益的數值也很大,所以不再讓收益當下標,放到陣列裡儲存,設f x t 表示以x為根的子樹中選擇t個人 節目,電視台的最大收益 讓你求什麼反而不一定要存在陣列裡面,可能是設為陣列下標再判斷可行性 這題比較特殊,一般分組揹包是過不了這麼大資料的...

題解 P1273 有線電視網

這題顯然是個樹形dp之樹上分組揹包,信心滿滿地寫出轉移方程後,發現 時間複雜度 o n 3 但仔細觀察了討論區和題解後,發現,這是 o n 2 的?於是我開始嘗試牙刷圖 分塊牙刷圖 菊花圖 掃帚圖。卡標算。燃鵝失敗了。證明 暫且先認為所有節點都會產生貢獻,這不會影響最壞複雜。考慮一下最裡面迴圈的過程...

P1273 有線電視網 樹形DP 樹上揹包

給定一顆有根樹,要求選擇最多的葉子結點,並且使得達到這些葉子結點的花費 可以理解成到葉子的路徑權值和 小於等於選擇的葉子結點的點權和。2 leq n leq 3000 1 leq m leq n 1 經典的樹上揹包問題。可以對一些葉子結點進行選或者不選的決策 以下參考洛谷yqw2486的題解 狀態轉...