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