bzoj1565 NOI2009 植物大戰殭屍

2022-05-19 05:32:50 字數 1043 閱讀 3774

對於一些植物存在保護它的植物,比如能攻擊到它的和它右邊的植物都能保護它

這就符合最大權閉合子圖的定義

按照最大權閉合子圖的建模方式,正權連源點,負權連匯點,中間就對於每個植物連向保護它的植物就好了

可惜有些保護是成環的,環內的植物以及被這個環保護的植物你乙個也碰不了

所以先反向建圖,跑一邊拓撲排序,將環處理出來,建模的時候忽略掉這些點就好了

**:

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

void read(int &x)

void print(int x)

#define rg register

const int maxn=1250,inf=1e9;queueq;bool vis[maxn];vectorg[maxn];

int dis[maxn],in[maxn],cnt=1,n,m,ans,pre[maxn*maxn],sum,x[30][40],r[30][40][700],c[30][40][700];

int cur[maxn],s,t,a[21][31],nxt[maxn*maxn],h[maxn],v[maxn*maxn];

int id(int x,int y)

void add(int x,int y,int z)

bool bfs()

return dis[t];

}int dfs(int x,int flow)

if(f==flow)dis[x]=-1;

return flow-f;

}int main()

queueqq;

for(rg int i=1;i<=n*m;i++)if(!in[i])qq.push(i),vis[i]=1;

while(!qq.empty())

for(;bfs();ans+=dfs(s,inf))memcpy(cur,h,sizeof h);

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

}

bzoj1565 NOI2009 植物大戰殭屍

傳送門 這道題吃到某個植物a可能需要先吃掉別的植物b 在他的右邊或者保護著他 那麼我們把a連向b。發現這是最大權閉合子圖。顯然是可以通過網路流水過的。閉合子圖 v中頂點的所有出邊均指向v內部頂點 那麼按照最大權閉合圖的建圖方法 1.s向正權點連流量為權值的邊 2.負權點向t連流量為權值的絕對值的邊 ...

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等等。其中最為經典的,...