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