這題顯然是個樹形dp之樹上分組揹包,信心滿滿地寫出轉移方程後,發現:時間複雜度 $ o(n^3) $ ???
但仔細觀察了討論區和題解後,發現,這是 $ o(n^2) $ 的???
於是我開始嘗試牙刷圖、分塊牙刷圖、菊花圖、掃帚圖。。。。卡標算。。。燃鵝失敗了。。。
證明:暫且先認為所有節點都會產生貢獻,這不會影響最壞複雜。
考慮一下最裡面迴圈的過程,可以認為等效於列舉之前的子樹裡的節點與當前子樹的節點的兩兩組合。
不難發現此時u節點是這樣的點對的lca,因此:每一對點只會在它們的lca上產生一次計算量。
由此可證,時間複雜度為 $ o(n^2) $ 。
#include#include#includeusing namespace std;
const int maxn=3005;
struct edge ;
int n,m,a[maxn],f[maxn][maxn],t[maxn];
edge mem[maxn],*g[maxn],*ecnt=mem;
inline void addedge(int u,int v,int w)
int dfs(int u)
int tot=0,v,sz;
for(edge *it=g[u];it;it=it->nxt)
return tot;
}int main()
} for(int i=n-m+1;i<=n;i++) scanf("%d",&a[i]);
memset(f,~0x3f,sizeof(f));
for(int i=1;i<=n;i++) f[i][0]=0;
dfs(1);
for(int i=m;i>=0;i--) if(f[1][i]>=0)
return 0;
}
有線電視網 洛谷p1273
某收費有線電視網計畫轉播一場重要的足球比賽。他們的轉播網和使用者終端構成一棵樹狀結構,這棵樹的根結點位於足球比賽的現場,樹葉為各個使用者終端,其他中轉站為該樹的內部節點。從轉播站到轉播站以及從轉播站到所有使用者終端的訊號傳輸費用都是已知的,一場轉播的總費用等於傳輸訊號的費用總和。現在每個使用者都準備...
有線電視網 洛谷 P1273
只能想到n 3的辦法 一看資料量自閉了。看了題解也是n 3 智障出題人 dp i j 代表以i為根的子樹選j個使用者時得到的最大收益 然後就是樹上揹包轉移一下 最後看根節點上最多選幾個人不虧本 include include include using namespace std const int...
有線電視網 洛谷P1273
題目描述 某收費有線電視網計畫轉播一場重要的足球比賽。他們的轉播網和使用者終端構成一棵樹狀結構,這棵樹的根結點位於足球比賽的現場,樹葉為各個使用者終端,其他中轉站為該樹的內部節點。從轉播站到轉播站以及從轉播站到所有使用者終端的訊號傳輸費用都是已知的,一場轉播的總費用等於傳輸訊號的費用總和。現在每個使...