啊 斯坦納樹 好像很厲害啊 反正我之前不會。。。
其實不知道實用性怎麼樣 畢竟複雜度不小。。。
大概過程就是乙個狀壓dp+spfa 列舉狀態 從小狀態更新大狀態 再對當前狀態做一次像spfa一樣的鬆弛操作
下面這個人講的不錯 可以去看看
為什麼我的**又那麼短 有點擔心優美度了 有誰提一下建議嗎2333 我覺得還過得去?
#include
#define me(a,x) memset(a,x,sizeof a)
using
namespace
std;
const
int n=11,inf=1e9+7;
const
int dx[4]=;
const
int dy[4]=;
inline
int read()
while(ch>='0'&&ch<='9')
return x*f;
}struct sg[n][n][1030];
int f[n][n][1030],a[n][n],n,m,b[n][n],cnt;
bool v[n][n];
bool upd(int x,int y,int u,int i,int j,int k,int w),1;
return0;}
queue
q;void spfa(int t));}}
}void dfs(int x,int y,int k)
void op()
printf("\n");
}}int main()
f[i][j][0]=a[i][j];
}int p=(1
for(i=1;i<=n;i++)for(j=1;j<=m;j++)
spfa(k);
}for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(!a[i][j])
}
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...
bzoj2595 Wc2008 遊覽計畫
time limit 10 sec memory limit 256 mbsec special judge submit 1931 solved 943 submit status discuss 第一行有兩個整數,n和 m,描述方塊的數目。接下來 n行,每行有 m 個非負整數,如果該整數為 0,...