bzoj1565 NOI2009 植物大戰殭屍

2021-07-31 15:28:39 字數 1082 閱讀 8690

傳送門

這道題吃到某個植物a可能需要先吃掉別的植物b(在他的右邊或者保護著他),那麼我們把a連向b。

發現這是最大權閉合子圖。

顯然是可以通過網路流水過的。

閉合子圖:

v中頂點的所有出邊均指向v內部頂點

那麼按照最大權閉合圖的建圖方法:

1.s向正權點連流量為權值的邊

2.負權點向t連流量為權值的絕對值的邊

3.有邊相連的兩點連流量為inf的邊

答案就是正權點的權值總和減去最小割。

但是資料中可能會出現氪金植物(玩家)

他們之間的保護關係像乙個環(想象乙個無冷卻的食人花前面放乙個堅果)

顯然非氪金玩家殭屍是幹不掉他們的。

所以在跑網路流之前先進行拓撲排序。

強制刪除不可達點即可。

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

#define n 605

using namespace std;

struct edgee[500005];

int head[n],in[n],dis[n],f[n],q[n],ok[n];

int n,m,s,t,p,x,y,ans,tot=1;

void ins(int

x,int

y,int w)

void topo()

}}bool bfs()

}return dis[t]!=-1;

}int dinic(int

x,int flow)

if (rest) dis[x]=-1;

return flow-rest;

}int main()

if (i%m) ins(i,i+1,inf);

}topo();

while (bfs()) ans-=dinic(s,inf);

printf("%d",ans);

}

BZOJ1565 NOI2009 植物大戰殭屍

好久沒寫部落格了 題目在這裡 沒什麼好說的 應該很容易看出是最大閉合子圖吧?不過要注意一下的是,這題可能有植物是不可能被擊潰的,所以要先跑一遍拓撲排序把這些點排除掉 include include include include include include include include usi...

BZOJ1565 NOI2009 植物大戰殭屍

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

Bzoj1565 NOI2009 植物大戰殭屍

time limit 10 sec memory limit 64 mb submit 2363 solved 1092 僅包含乙個整數,表示可以獲得的最大能源收入。注意,你也可以選擇不進行任何攻擊,這樣能源收入為0。3 210 0 20 0 10 0 5 1 0 0 100 1 2 1 100 0...