BZOJ2595 WC2008 遊覽計畫

2022-05-03 15:57:19 字數 985 閱讀 4367

link

斯坦納樹裸題。

什麼是斯坦納樹呢?就是求一類生成樹,用如下dp方程即可求解:

\(f_\)表示點\(i\)與其它的關鍵點連通性為\(j\)的最小花費。

\[f_=f_+f_ (s\in j)

\]\[f_=f_+cost_

\]不難發現,如果把兩維獨立的話,那麼上面就是層之間的轉移。

下面就是乙個層之內的鬆弛操作,用最短路鬆弛即可解決。

#include#include#include#include#include#includeusing namespace std;

#define ll long long

inline int read()

const int inf = 1007483600;

const int maxn = 100010;

int n,m; struct mx}; queueque;

struct pos };

int f[11][11][(1<<11)];pos g[11][11][(1<<11)]; bool vis[11][11];

int dis[4][2]=,,,}; int a[11][11];

inline void spfa(int t)

}} return ;

}inline void dfs(int x,int y,int t)

int x[11],y[11],c;

int main()

} for(int i=0;i<=n;i++)

} if(f[i][j][grz]}

} spfa(grz);

} printf("%d\n",f[x[1]][y[1]][(1

}return 0;

}

BZOJ 2595 Wc2008 遊覽計畫

啊 斯坦納樹 好像很厲害啊 反正我之前不會。其實不知道實用性怎麼樣 畢竟複雜度不小。大概過程就是乙個狀壓dp spfa 列舉狀態 從小狀態更新大狀態 再對當前狀態做一次像spfa一樣的鬆弛操作 下面這個人講的不錯 可以去看看 為什麼我的 又那麼短 有點擔心優美度了 有誰提一下建議嗎2333 我覺得還...

BZOJ 2595 Wc2008 遊覽計畫

n m 的網格,如果 a 0 則表示景點,否則表示這裡的需要的志願者人數。求一種安排志願者的方案使得所有景點連通且志願者最少。本題可以插頭dp,然而有乙個東西叫斯坦納樹,來學習學習。令 f i,j,s 表示 i,j 為根,連通性為 s 的最少志願者。則有轉移 f i,j,s min begin f ...

bzoj2595 Wc2008 遊覽計畫

斯坦納樹 f i zt 表示以i為根,連成的聯通塊包括那些景點 兩個轉移 f i zt f i tzt f i zt tzt a i f i zt f j zt a i i,j 相鄰 後面這個可以用spfa優化 記得先進行前乙個轉移,還有容斥減掉a i include include include...