考虑到每次与主人相遇之前最多只去一个景点,很容易转化为匹配问题

由于数据很小,我们不妨枚举每个相遇点间隙和每个景点,判断是否来得及,如果来得及就连边

沙雕题搞了二十来分钟,我是憨憨

#include <bits/stdc++.h>
using namespace std;
#define N 505
int n,m,p,cx[N],cy[N],vis[N],ax[N],ay[N],bx[N],by[N];
std::vector<int> e[N];
int dfs(int u,int Time) {
for(int i=0;i<(int)e[u].size();++i) {
int v=e[u][i];
if(vis[v]^Time) {
vis[v]=Time;
if(!cy[v]||dfs(cy[v],Time)) {
cx[u]=v; cy[v]=u;
return 1;
}
}
}
return 0;
}
double dist(double x1,double y1,double x2,double y2) {
return sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
}
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++) {
cin>>ax[i]>>ay[i];
}
for(int i=1;i<=m;i++) {
cin>>bx[i]>>by[i];
}
for(int i=1;i<n;i++) {
for(int j=1;j<=m;j++) {
if(dist(ax[i],ay[i],bx[j],by[j])+dist(ax[i+1],ay[i+1],bx[j],by[j])
<= 2.0*dist(ax[i],ay[i],ax[i+1],ay[i+1]))
e[i].push_back(j);
}
}
int ans=0;
for(int i=1;i<=n;++i) ans+=dfs(i,i);
printf("%d\n",ans+n);
for(int i=1;i<=n;i++) {
cout<<ax[i]<<" "<<ay[i]<<" ";
if(cx[i]) cout<<bx[cx[i]]<<" "<<by[cx[i]]<<" ";
}
}

[SHOI2001] 小狗散步 - 二分图匹配的更多相关文章

  1. luoguP2526_[SHOI2001]小狗散步_二分图匹配

    luoguP2526_[SHOI2001]小狗散步_二分图匹配 题意: Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点 ...

  2. 洛谷P2526 [SHOI2001]小狗散步(二分图匹配)

    题目背景 Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇.小狗和主人同时从(X1,Y1 ...

  3. SHOI2001 小狗散步

    题目传送门 感觉这题最大的难点是发现它的解法是二分图最大匹配 主人的路线是固定的,对于每一段的路线,我们可以枚举小狗想去的景点,如果时间够,我们就将这段路线的起点和小狗想去的点连起来 这样就形成了一个 ...

  4. [P2526][SHOI2001]小狗散步

    Link: P2526 传送门 Solution: 一道提示非常到位的题目 题面中强调了在两个路径相邻点间只能再去至多一个点,且每个点只计算一次贡献 于是明显可以将原题看作询问在两个不相交点集间最多能 ...

  5. [luoguP2526] [SHOI2001]小狗散步(二分图最大匹配)

    传送门 简直就是模板题啊! #include <cmath> #include <cstdio> #include <cstring> #include <i ...

  6. luogu2526 [SHOI2001]小狗散步

    注意一个景点只能去一次. #include <iostream> #include <cstring> #include <cstdio> #include < ...

  7. 洛谷P2526 【SHOI2001】小狗散步

    原题传送门 题目背景 Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇.小狗和主人同时从 ...

  8. BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配

    BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配 Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个 ...

  9. 【BZOJ4443】小凸玩矩阵(二分答案,二分图匹配)

    [BZOJ4443]小凸玩矩阵(二分答案,二分图匹配) 题面 BZOJ Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两 ...

随机推荐

  1. const与指针、引用

    const与指针类型 定义一个指针*p: const int* p = NULL; int const* p = NULL; int* const p = NULL; 上面两行定义完全等价,第三行则不 ...

  2. java工作流系统表单自动 获取数据

    关键词:工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流  bpm工作流系统  java工作流主流框架  自定义工作流引擎 表单设计器  流程设计器 什么是数据自动获 ...

  3. 限制input输入框只能输入 数字

    <input type="text" oninput = "value=value.replace(/[^\d]/g,'')">

  4. Github无法访问的解决办法

    #github 192.30.253.113 github.com 192.30.253.113 github.com 192.30.253.118 gist.github.com 192.30.25 ...

  5. 【DTOJ】2704:数字互换

    DTOJ 2704:数字互换  解题报告 2017.11.11 第一版 ——由翱翔的逗比w原创 题目信息: 题目描述 输入两个数作为交换数,输出已交换顺序后的两个值. 输入 两个整数,空格隔开 输出 ...

  6. linux系统下apache服务的启动、停止、重启命令

    本文章简单的介绍了关于linux下在利用命令来操作apache的基本操作如启动.停止.重启等操作,对入门者不错的选择.本文假设你的apahce安装目录为 usr local apache2,这些方法适 ...

  7. VScode搭建OpenCV环境

    用vscode来写opencv代码需要自己编译OpenCV,主要用到MinGW-w64和CMake工具.由于可能存在的版本兼容问题,下载这些工具前最好先访问网站: https://github.com ...

  8. centos tomcat解压版安装

    解压: tar -xzvf apache-tomcat-8.5.23.tar.gz -C /usr/local/java 配置Tomcat的环境变量: export CATALINA_HOME=/us ...

  9. NIO学习笔记,从Linux IO演化模型到Netty—— Linux零拷贝

    这里只是感性地认识Linux零拷贝,不涉及具体细节. 1.Linux传统的数据拷贝 用户进程是不能直接访问文件系统的,要先切换到内核态,发起系统调用,DMA把磁盘中的数据写入内核空间,内核再把数据拷贝 ...

  10. jQuery---on注册事件的2种方式

    on注册事件的2种方式 on注册事件的语法 on注册简单事件 // 这个是p自己注册的事件(简单事件) $("p").on("click", function ...