NOI2009 植物大戰殭屍

2022-03-03 17:03:10 字數 1162 閱讀 7176

最大權閉合子圖。一般來說建圖方法都是——正權值連s,負權值連t,如果乙個節點被選擇,其子節點也必須被選擇,連一條inf的有向邊。求最小割即可,答案就是正權點權值和-最大流——中間的邊一定不可能被割掉左邊割掉,左邊割掉表示不選擇,右邊割掉表示選擇。

但是有可能出現環的情況,這樣子不能直接割。我們考慮先來乙個tarjan縮點,給每個點的權值都賦成-inf。

**如下:

#include#include#include#include#include#include#define s 0

#define t n*m+1

#define maxn 400010

#define inf 0x3f3f3f3f

#define check

using namespace std;

int n,m,cnt1=1,cnt2,cnt,top,ans,tim;

int head1[maxn],head2[maxn],sum[maxn],dep[maxn],cur[maxn];

int in[maxn],dfn[maxn],low[maxn],ins[maxn],st[maxn];

struct edgeedge[maxn],pre[maxn];

inline int id(int x,int y)

inline void add1(int from,int to,int dis,int p)

inline void add2(int from,int to)

inline void tarjan(int x)

if(dfn[x]==low[x])

while(x!=v);}}

}inline bool bfs()

}if(dep[t]==0x3f3f3f3f) return false;

return true;

}inline int dfs(int x,int f)

}return used;

}inline int dinic()

int main()

else

for(int k=head2[id(i,j)];k;k=pre[k].nxt)}}

printf("%d\n",ans-dinic());

return 0;

}

NOI2009 植物大戰殭屍

這道題跟noi2006 最大獲利其實是很像的 一樣都是要搞定一些點才能搞定另一些點,然後有些點正權有些點負權 這種問題,其實是最大權閉合子圖 amber的最小割 有詳細的講解法和證明 閉合子圖的定義是,圖中每個點所連線的的任何一條邊不指向圖外,可以有邊指向這個圖 這實際上就是乙個依賴關係,如果我們把...

NOI 2009 植物大戰殭屍

plants vs.zombies pvz 是最近十分風靡的一款小遊戲。plants 植物 和 zombies 殭屍 是遊戲的主角,其中 plants 防守,而 zombies 進攻。該款遊戲包含多種不同的挑戰系列,比如 protect your brain bowling 等等。其中最為經典的,莫...

NOI2009 植物大戰殭屍

這道題跟noi2006 最大獲利其實是很像的 一樣都是要搞定一些點才能搞定另一些點,然後有些點正權有些點負權 這種問題,其實是最大權閉合子圖 amber的最小割 有詳細的講解法和證明 閉合子圖的定義是,圖中每個點所連線的的任何一條邊不指向圖外,可以有邊指向這個圖 這實際上就是乙個依賴關係,如果我們把...