poj 3020 Antenna Placement
来源:互联网 发布:java 变量类型 编辑:程序博客网 时间:2024/06/11 06:06
题意:给出一个图,用最少的椭圆覆盖所有的点,一个椭圆最多覆盖两个点,纵向或横向。
分析:贪心,尽可能使椭圆覆盖两个点,所以答案就是 点数 - 最大匹配数。
#include <cstdio>#include <cstring>#include <vector>using namespace std;int np, n, m, p[450];int ind[50][50];char s[50][50];bool vis[450];vector<int>h[450];bool find(int u){ for(int i = 0; i < h[u].size(); i++) { int v = h[u][i]; if(!vis[v]) { vis[v] = true; if(p[v] == -1 || find(p[v])) { p[u] = v; p[v] = u; return true; } } } return false;}int MaxMatch(){ int ans = 0; memset(p, -1, sizeof(p)); for(int i = 0; i < np; i++) { if(p[i] == -1) { memset(vis, false, sizeof(vis)); ans += find(i); } } return ans;}int main(){ int t; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); np = 0; for(int i = 0; i < n; i++) { scanf("%s", s[i]); for(int j = 0; j < m; j++) { if(s[i][j] == '*') { ind[i][j] = np++; if(j && s[i][j-1] == '*') { h[ind[i][j]].push_back(ind[i][j-1]); h[ind[i][j-1]].push_back(ind[i][j]); } if(i && s[i-1][j] == '*') { h[ind[i][j]].push_back(ind[i-1][j]); h[ind[i-1][j]].push_back(ind[i][j]); } } } } printf("%d\n", np - MaxMatch()); for(int i = 0; i < np; i++) h[i].clear(); } return 0;}
0 0
- poj 3020 Antenna Placement
- Poj 3020 Antenna Placement
- Poj 3020 Antenna Placement
- poj 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- poj 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020 Antenna Placement
- POJ 3020Antenna Placement
- 【POJ 3020】Antenna Placement
- poj 3020 Antenna Placement
- poj-3020 Antenna Placement
- POJ 3020 Antenna Placement
- Centos6.5编译安装nginx时出现的问题
- linux 基本命令之文件处理命令
- Spring batch基础一
- 【玲珑杯 1047】【二分匹配 KM算法或者费用流】Best couple【定义男女生的距离为最短距离,求匹配之后使得总距离最大】
- 基于Agera的EventBus实现库
- poj 3020 Antenna Placement
- 169. Majority Element
- CodeForces 152E
- jquery遍历表格获取表格当前行数据
- 浅谈CSS外边距合并
- UbuntuServer安装tomcat与初始化设置(命令行)
- android知识回顾-------使用到的设计模式及举例
- Atitit 基于图片图像 与文档混合文件夹的分类
- First day