博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1548 Robots(最小路径覆盖)
阅读量:5132 次
发布时间:2019-06-13

本文共 1236 字,大约阅读时间需要 4 分钟。

POJ 1548 Robots

题意:乍一看还以为是小白上那题dp,事实上不是,就是求一共几个机器人能够覆盖全部路径

思路:最小路径覆盖问题。一个点假设在还有一个点右下方,就建边。然后跑最小路径覆盖就可以

代码:

#include 
#include
#include
#include
using namespace std;const int N = 25 * 25;int x[N], y[N], cnt = 1;vector
g[N];bool judge(int i, int j) { return x[j] >= x[i] && y[j] >= y[i];}int left[N], vis[N];bool dfs(int u) { for (int i = 0; i < g[u].size(); i++) { int v = g[u][i]; if (vis[v]) continue; vis[v] = 1; if (left[v] == -1 || dfs(left[v])) { left[v] = u; return true; } } return false;}int hungary() { int ans = 0; memset(left, -1, sizeof(left)); for (int i = 0; i < cnt; i++) { memset(vis, 0, sizeof(vis)); if (dfs(i)) ans++; } return ans;}int main() { while (~scanf("%d%d", &x[0], &y[0])) { if (x[0] == -1 && y[0] == -1) break; while (~scanf("%d%d", &x[cnt], &y[cnt])) { if (x[cnt] == 0 && y[cnt] == 0) break; cnt++; } for (int i = 0; i < cnt; i++) { g[i].clear(); for (int j = 0; j < i; j++) { if (judge(i, j)) g[i].push_back(j); if (judge(j, i)) g[j].push_back(i); } } printf("%d\n", cnt - hungary()); cnt = 1; } return 0;}

转载于:https://www.cnblogs.com/brucemengbm/p/7391466.html

你可能感兴趣的文章
bzoj2038 [2009国家集训队]小Z的袜子(hose)
查看>>
Java反射机制及其Class类浅析
查看>>
Postman-----如何导入和导出
查看>>
移动设备显示尺寸大全 CSS3媒体查询
查看>>
图片等比例缩放及图片上下剧中
查看>>
【转载】Linux screen 命令详解
查看>>
background-clip,background-origin
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
java学习第三天
查看>>
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
8、RDD持久化
查看>>