BZOJ 2595 Wc2008 遊覽計畫

2021-07-30 09:01:20 字數 995 閱讀 4670

啊 斯坦納樹 好像很厲害啊 反正我之前不會。。。

其實不知道實用性怎麼樣 畢竟複雜度不小。。。

大概過程就是乙個狀壓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,...