對於一些植物存在保護它的植物,比如能攻擊到它的和它右邊的植物都能保護它
這就符合最大權閉合子圖的定義
按照最大權閉合子圖的建模方式,正權連源點,負權連匯點,中間就對於每個植物連向保護它的植物就好了
可惜有些保護是成環的,環內的植物以及被這個環保護的植物你乙個也碰不了
所以先反向建圖,跑一邊拓撲排序,將環處理出來,建模的時候忽略掉這些點就好了
**:
#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等等。其中最為經典的,...