BZOJ1565 NOI2009 植物大戰殭屍

2022-05-09 13:18:12 字數 1384 閱讀 1266

好久沒寫部落格了

題目在這裡

沒什麼好說的

應該很容易看出是最大閉合子圖吧?

不過要注意一下的是,這題可能有植物是不可能被擊潰的, 所以要先跑一遍拓撲排序把這些點排除掉

#include #include #include #include #include #include #include #include using namespace std;

const int n = 810, m = 500010;

const int inf = 0x7f7f7f7f;

int n, m;

int val[40][40];

vector< pair> vec[40][40];

bool vis[n]; //vis為0的點就是不可能擊潰的點

struct edge

edge(int _1, int _2, int _3, int _4) : from(_1), to(_2), flow(_3), cap(_4)

};struct dinic

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

int s, t;

int d[n];

bool bfs()

}} return d[t] != -1;

} int cur[n];

int dfs(int x, int a)

}return flow;

} int maxflow(int _s, int _t)

return flow;

}} dinic;

int s, t;

int in[n];

int num[n];

inline int id(int x, int y)

void topo() }}

void build()

if (j > 1)

dinic.add_edge(id(i, j-1), id(i, j), inf),

in[id(i, j-1)]++;

} }}int main()

} build();

topo();

int ans = 0;

for (int i = 1; i <= n*m; i++)

if (vis[i] && num[i] > 0)

ans += num[i];

vis[s] = vis[t] = 1;

ans -= dinic.maxflow(s, t);

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

return 0;

}

bzoj1565 NOI2009 植物大戰殭屍

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

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