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...