BZOJ3175 Tjoi2013 攻击装置(二分图匹配)
2016-02-14 20:27
639 查看
传送门
求在装置互不攻击的情况下,最多可以放置多少个装置。
010
000
100
这……这不是裸的二分图最大点独立集么……匈牙利水过……
Description
给定一个01矩阵,其中你可以在0的位置放置攻击装置。每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2),(x-2,y-1),(x+1,y-2),(x+2,y-1),(x-1,y+2),(x-2,y+1), (x+1,y+2),(x+2,y+1)求在装置互不攻击的情况下,最多可以放置多少个装置。
Input
第一行一个整数N,表示矩阵大小为N*N。接下来N行每一行一个长度N的01串,表示矩阵。Output
一个整数,表示在装置互不攻击的情况下最多可以放置多少个装置。Sample Input
3010
000
100
Sample Output
4HINT
100%数据 N<=200这……这不是裸的二分图最大点独立集么……匈牙利水过……
/************************************************************** Problem: 3175 User: geng4512 Language: C++ Result: Accepted Time:840 ms Memory:9240 kb ****************************************************************/ #include<cstdio> #define MAXN 40005 #define MAXM 1000005 struct node { int v, nxt; }e[MAXM]; int n, ecnt, Adj[MAXN], cnt, dd[8][2] = {-1, -2, -1, 2, -2, -1, -2, 1, 1, 2, 1, -2, 2, 1, 2, -1}, c[MAXN], tag, vis[MAXN]; inline void Add(int u, int v) { ++ ecnt; e[ecnt].v = v; e[ecnt].nxt = Adj[u]; Adj[u] = ecnt; } char s[300][300]; int dfs(int u) { vis[u] = tag; for(int i = Adj[u]; i; i = e[i].nxt) if(tag != vis[e[i].v]) { vis[e[i].v] = tag; if(!c[e[i].v] || dfs(c[e[i].v])) { c[u] = e[i].v; c[e[i].v] = u; return 1; } } return 0; } inline int Hungary() { int ans = 0; for(int i = 1; i < n*n; ++ i) tag = i, ans += dfs(i); return ans; } int main() { scanf("%d", &n); for(int i = 0; i < n; ++ i) scanf("%s", s[i]); for(int i = 0; i < n; ++ i) { for(int j = 0; j < n; ++ j) { if(s[i][j]-'0') ++ cnt; else if((i+j)&1){ for(int k = 0; k < 8; ++ k) { int x = i + dd[k][0], y = j + dd[k][1]; if(x < 0 || x >= n || y < 0 || y >= n || s[x][y] == '1') continue; Add(i*n+j, x*n+y); } } } } int ans = n*n-Hungary()-cnt; printf("%d\n", ans); return 0; }
相关文章推荐
- Ubuntu下设置apktool
- 网上商城——ApplicationContext.xml
- Android酷炫实用的开源框架(UI框架)
- angularjs 路由切换
- iOS 可移动View的实现
- 浅复制 & 深复制
- S - 骨牌铺方格(第二季水)
- BZOJ3174 Tjoi2013 拯救小矮人(贪心+DP)
- BZOJ3174 Tjoi2013 拯救小矮人(贪心+DP)
- java工程师 一道面向对象面试题
- Singleton单一状态模式(单例模式)
- eerTemaS.100
- [算法]不包含本位置值的累乘数组
- 一起来数兔子
- Markdown中插入数学公式的方法
- 了解HTML 盒模型
- Android学习(4)之页面间的传值——Intent意图对象的两种方式
- iOS9新特性及其适配方案
- Java的反射,内省,beanUtils工具
- 七层登录实现