http://poj.org/problem?id=1034

题意:

猎人和狗一起出去,狗的速度是猎人的两倍,给出猎人的路径坐标,除了这些坐标外,地图上还有一些有趣的点,而我们的狗,就是要尽量去多的有趣的点。前提是在猎人到达一个点的时候,狗必须也正好到。

思路:

二分图匹配,猎人的路径在一边,有趣的点在另一边,我们就是求一个最大匹配。

 #include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
using namespace std; struct node
{
int x, y;
}; node Bob[], Dog[];
int g[][];
int vis[];
int match[];
int path[];
int n, m; double dis(int x1, int y1, int x2, int y2)
{
return sqrt((double)(x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1));
} int dfs(int x)
{
for (int i = ; i < m; i++)
{
if (g[x][i] && !vis[i])
{
vis[i] = ;
if (match[i]==- || dfs(match[i]))
{
match[i] = x;
return ;
}
}
}
return ;
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> n >> m)
{
for (int i = ; i < n; i++)
cin >> Bob[i].x >> Bob[i].y;
for (int i = ; i < m; i++)
cin >> Dog[i].x >> Dog[i].y; memset(g, , sizeof(g));
memset(match, -, sizeof(match)); for (int i = ; i < n - ; i++)
for (int j = ; j < m; j++)
{
double d1 = dis(Bob[i].x, Bob[i].y, Bob[i + ].x, Bob[i + ].y);
double d2 = dis(Bob[i].x, Bob[i].y, Dog[j].x, Dog[j].y);
double d3 = dis(Bob[i + ].x, Bob[i + ].y, Dog[j].x, Dog[j].y);
if (d2 + d3 - * d1 <= )
g[i][j] = ;
}
int ans = ;
for (int i = ; i < n; i++)
{
memset(vis, , sizeof(vis));
if(dfs(i)) ans++;
}
cout << ans + n << endl; memset(path, -, sizeof(path));
for (int i = ; i < m; i++)
{
if (match[i] != -)
path[match[i]] = i;
}
for (int i = ; i < n - ; i++)
{
cout << Bob[i].x << " " << Bob[i].y << " ";
if (path[i] != -)
cout << Dog[path[i]].x << " " << Dog[path[i]].y << " ";
}
cout << Bob[n - ].x << " " << Bob[n - ].y << endl;
}
return ;
}

POJ 1034 The dog task(二分图匹配)的更多相关文章

  1. poj 1034 The dog task (二分匹配)

    The dog task Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2559   Accepted: 1038   Sp ...

  2. POJ 1719 Shooting Contest(二分图匹配)

    POJ 1719 Shooting Contest id=1719" target="_blank" style="">题目链接 题意:给定一个 ...

  3. 【POJ 3020】Antenna Placement(二分图匹配)

    相当于用1*2的板覆盖给定的h*w的格子里的点,求最少的板.可以把格子相邻的分成两个集合,如下图,0为一个集合,1的为一个,也就是(行数+列数)为奇数的是一个集合,为偶数的为另一个集合.1010101 ...

  4. POJ 2112 Optimal Milking(二分图匹配)

    [题目链接] http://poj.org/problem?id=2112 [题目大意] 给出一些挤奶器,每台只能供给M头牛用,牛和挤奶器之间有一定的距离 现在要让每头牛都挤奶,同时最小化牛到挤奶器的 ...

  5. poj 2112 Optimal Milking (二分图匹配的多重匹配)

    Description FJ has moved his K ( <= K <= ) milking machines <= C <= ) cows. A ..K; the c ...

  6. POJ 1422 Air Raid(二分图匹配最小路径覆盖)

    POJ 1422 Air Raid 题目链接 题意:给定一个有向图,在这个图上的某些点上放伞兵,能够使伞兵能够走到图上全部的点.且每一个点仅仅被一个伞兵走一次.问至少放多少伞兵 思路:二分图的最小路径 ...

  7. POJ 2226 Muddy Fields (二分图匹配)

    [题目链接] http://poj.org/problem?id=2226 [题目大意] 给出一张图,上面有泥和草地,有泥的地方需要用1*k的木板覆盖, 有草地的地方不希望被覆盖,问在此条件下需要的最 ...

  8. POJ 1486 Sorting Slides(二分图匹配)

    [题目链接] http://poj.org/problem?id=1486 [题目大意] 给出每张幻灯片的上下左右坐标,每张幻灯片的页码一定标在这张幻灯片上, 现在问你有没有办法唯一鉴别出一些幻灯片 ...

  9. POJ 1486 Sorting Slides【二分图匹配】

    题目大意:有n张幻灯片和n个数字,幻灯片放置有重叠,每个数字隶属于一个幻灯片,现在问你能够确定多少数字一定属于某个幻灯片 思路:上次刷过二分图的必须点后这题思路就显然了 做一次二分匹配后将当前匹配的边 ...

随机推荐

  1. 【转】DevOps的前世今生

    转自:http://www.infoq.com/cn/news/2016/09/learn-devops-from-reports 目前在国外,互联网巨头如Google.Facebook.Amazon ...

  2. 【BZOJ4099】Trapped in the Haybales Gold STL

    [BZOJ4099]Trapped in the Haybales Gold Description Farmer John has received a shipment of N large ha ...

  3. OneThink视图模型进行组合查询!文档组合文档详情

    测试方法:twoCate: public function twoCate(){ $where = array( 'category_id'=>43 ); $list = D('TwoView' ...

  4. Linux系统下tomcat安装配置

    Linux系统中Tomcat的安装配置. 前提JDK已经安装好. 安装 下载tomcatwget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0 ...

  5. Jquery Uploadify使用参数详解

    开始上传  $('#uploadify_1').uploadifyUpload(); 1 uploader uploadify.swf文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击 ...

  6. ajax 实现单选按钮的选中值

    <input type=" checked="checked" /> 男     <input type="/>女 $(".s ...

  7. hibernate基于注解实现映射关系的配置

    关联关系的配置步骤 ①要理清楚管理关系 ②确定管理依赖关系的哪一方 1一对一例如:person 和IdCard ①确定依赖关系:一对一 ②依赖关系由person类管理代码如下: person: @En ...

  8. Docker企业级仓库Harbor的安装配置与使用

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distribution.作为一个企业级 ...

  9. 系统管理命令之who am i

    who am i 显示的是实际用户的用户名,即用户登陆的时候的用户ID.此命令相当于who -m. 用Linux的术语来解释就是:(实际用户=uid,即user id.有效用户=euid,即effec ...

  10. cookie—基于js的coolie使用

    //设置cookie function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.setTime(exp.get ...