2595 Wc2008 遊覽計畫

2021-07-15 15:25:59 字數 2773 閱讀 9583

time limit: 10 sec  

memory limit: 256 mbsec  

special judge

submit: 1312  

solved: 602 [

submit][

status][

discuss]

第一行有兩個整數,n和 m,描述方塊的數目。 

接下來 n行, 每行有 m 個非負整數, 如果該整數為 0, 則該方塊為乙個景點;

否則表示控制該方塊至少需要的志願者數目。 相鄰的整數用 (若干個) 空格隔開,

行首行末也可能有多餘的空格。

由 n + 1行組成。第一行為乙個整數,表示你所給出的方案

中安排的志願者總數目。 

接下來 n行,每行m 個字元,描述方案中相應方塊的情況: 

z  『_』(下劃線)表示該方塊沒有安排志願者; 

z  『o』(小寫英文本母o)表示該方塊安排了志願者; 

z  『x』(小寫英文本母x)表示該方塊是乙個景點; 

注:請注意輸出格式要求,如果缺少某一行或者某一行的字元數目和要求不

一致(任何一行中,多餘的空格都不允許出現) ,都可能導致該測試點不得分。

4 4

0 1 1 0

2 5 5 1

1 5 5 1

0 1 1 0

6 xoox

___o

___o

xoox

對於100%的資料,n,m,k≤10,其中k為景點的數目。輸入的所有整數均在[0,2^16]的範圍內

ljcc930提供spj [

submit][

status][

discuss]

嗯。。裸的斯坦納樹模板

就是給一張圖,要求k個關鍵點聯通的最小生成樹的權值最小值是多少

這就意味著原圖有些點可能根本就是多餘的

那麼將題目給的圖轉換一下,然後:

f[o][j]:關鍵點的選擇狀態為o,當前以j為根,最優方案

f[o][j] = min(f[op][j] + f[o-op][j])

即將已經構建好的兩棵子樹直接合併

或f[o][j] = min(f[o][k] + va[j])  即某個合法方案中再連線上k-j這條邊

第二個式子很像最短路的式子?

沒錯,用spfa解決

tip:

列舉乙個二進位制數的真子集 for(int op = (o-1)&o; op; op = (op-1)&o)

spfa的源點只選用f[o][j] != inf

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

const int maxn = 210;

const int maxm = 1<<12;

const int inf = 1e8;

const int dx[8] = ;

const int dy[8] = ;

struct data

}fa[maxm][maxn];

int n,m,tot,k,num[maxn][maxn],va[maxn],f[maxm][maxn],

typ[maxn][maxn],vis[maxn],pox[maxn],poy[maxn],p[maxn][maxn];

queue q;

vector v[maxn];

void spfa(int o)

} }}bool check(data k)

void work(int o,int i)

void solve(int o)

if (f[o][j] != inf) q.push(j),vis[j] = 1;

} spfa(o);

}int main()

} k = tot;

for (int i = 1; i <= n; i++)

for (int j = 1; j <= m; j++)

if (p[i][j])

for (int i = 1; i <= n; i++)

for (int j = 1; j <= m; j++)

for (int l = 0; l < 4; l++)

for (int i = 0; i < (1<>1,root;

for (int i = 1; i <= tot; i++)

if (f[(1<最後。。。。因為本題的權值在點上不在邊上

所以上述的第乙個方程其實是錯的

應為f[o][j] = f[op][j] + f[o-op][j] - va[j]

因為根的權值被選了兩次。。兩次

mlgb調了好久啊

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