P4297 NOI2006 網路收費

2022-05-07 19:30:08 字數 1115 閱讀 8645

我們先換種方式說一下\(k*f_\):

對於葉子點對\((x,y)\),設其\(lca\)為\(z\)。

我們對\(z\)也進行賦值,\(na為\(0\),反之則為\(1\)。

那麼\(k*f_\)其實就是如果\(x/y\)和\(z\)的值相同,那麼就會產生\(f_\)的代價。

於是我們現在變成了點的代價,我們考慮樹形dp:

設\(f_\)表示\(x\)的子樹,選了\(i\)個\(b\)的最小代價,\(val_\)表示\(x\)對深度為\(i\)的代價,即\(\sum\limits_f_\)。

我們在dfs過程中列舉下從根到\(x\)的路徑上各個路由器是\(0\)還是\(1\),記為\(vis_i\)。

到葉子時直接推出即可,之後可以樹形揹包合併,注意只能更新合法(滿足\(vis_x\))的狀態。

本質就是列舉每個路由器的狀態,只不過一次列舉一條鏈,保證複雜度。

code:

#includeusing namespace std;

#define ls(x) (x<<1)

#define rs(x) (x<<1|1)

typedef long long ll;

const int maxn=15;

const int maxm=3010;

const ll inf=1e18;

int n;

int a[maxm];

ll ans;

ll cost[maxm][2],val[maxm][maxn],f[maxm][maxm];

bool vis[maxm];

inline ll read()

while(c>='0'&&c<='9')res=res*10+c-'0',c=getchar();

return res*f;

}inline int lca(int x,int y)

void dfs(int x,int dep,int l,int r)

int main()

dfs(1,1,1,1

for(int i=0;i<=(1

return 0;

}

bzoj 1495 NOI2006 網路收費

坑了一上午qaq感覺自己好弱智啊 bzoj上的題面坑死人,2n是鬧哪樣啊,明明是2 n,害的我還以為是水題,wa了好幾次。然後上cogs 好評 上看了下題,發現是2 n,然後 裡的省空間方法好麻煩,於是直接用vector 動態開節點水過去了。話說我這個寫得怎麼這麼像線段樹2333333 includ...

並不對勁的 noi2006 網路收費

題目略長,就從大視野上覆制了。聽上去好像費用流,然而 表示略長的題目的分界線 網路已經成為當今世界不可或缺的一部分。每天都有數以億計的人使用網路進行學習 科研 娛樂等活動。然而,不可忽視的一點就是網路本身有著龐大的執行費用。所以,向使用網路的人進行適當的收費是必須的,也是合理的 my市ns中學就有著...

NOI2019網路同步賽遊記

我發的郵件 f沒收到,後來去專門詢問才整到乙個名額 估計是嫌我太菜,參加了也是墊底 上午寫了到類似隨機遊走的高斯消元期望dp,然後頹頹頹 下午打洛咕月賽。t1一直50pts,後來才知道是鍋 t2先手賤寫了個假演算法,然後手寫了個splay艹過去 t3是原題,懶著寫正解了,60pts暴力多短 畢竟人是...