[SHOI2001] 小狗散步 - 二分图匹配
考虑到每次与主人相遇之前最多只去一个景点,很容易转化为匹配问题
由于数据很小,我们不妨枚举每个相遇点间隙和每个景点,判断是否来得及,如果来得及就连边
沙雕题搞了二十来分钟,我是憨憨
#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] 小狗散步 - 二分图匹配的更多相关文章
- luoguP2526_[SHOI2001]小狗散步_二分图匹配
luoguP2526_[SHOI2001]小狗散步_二分图匹配 题意: Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点 ...
- 洛谷P2526 [SHOI2001]小狗散步(二分图匹配)
题目背景 Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇.小狗和主人同时从(X1,Y1 ...
- SHOI2001 小狗散步
题目传送门 感觉这题最大的难点是发现它的解法是二分图最大匹配 主人的路线是固定的,对于每一段的路线,我们可以枚举小狗想去的景点,如果时间够,我们就将这段路线的起点和小狗想去的点连起来 这样就形成了一个 ...
- [P2526][SHOI2001]小狗散步
Link: P2526 传送门 Solution: 一道提示非常到位的题目 题面中强调了在两个路径相邻点间只能再去至多一个点,且每个点只计算一次贡献 于是明显可以将原题看作询问在两个不相交点集间最多能 ...
- [luoguP2526] [SHOI2001]小狗散步(二分图最大匹配)
传送门 简直就是模板题啊! #include <cmath> #include <cstdio> #include <cstring> #include <i ...
- luogu2526 [SHOI2001]小狗散步
注意一个景点只能去一次. #include <iostream> #include <cstring> #include <cstdio> #include < ...
- 洛谷P2526 【SHOI2001】小狗散步
原题传送门 题目背景 Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇.小狗和主人同时从 ...
- BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配
BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配 Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个 ...
- 【BZOJ4443】小凸玩矩阵(二分答案,二分图匹配)
[BZOJ4443]小凸玩矩阵(二分答案,二分图匹配) 题面 BZOJ Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两 ...
随机推荐
- 0x01 C语言-编写第一个hello world
学习每一个编程语言都是从 "Hello world!" 开始的,这好像就是编程界一条不成文的规定一样. 在这篇文章中,我将教大家编写一个可以输出 "Hello world ...
- html文件如何下载文件
HTML中下载文件两种方法:a标签下载:js下载; <!-- 网页地址和图片地址同源的情况下这样是可以的,不同源则是直接打开这个地址 --> <!-- 方法一:同源情况下载 --&g ...
- Lucene之查询索引
Query子类 TermQuery:根据域和关键词进行搜索 /** * termQuery根据域和关键词进行搜索 */ @Test public void termQuery() throws IOE ...
- pip 自己的源 搭建
1 安装工具 pip install pip2pi 2 下载 所需要的包 pip2tgz /application/nginx/html/yum/python/ apscheduler (172 ...
- uniapp后台api设计(微信user表)
MySQL 创建数据库: CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CHARACTER SET <字符集名>] [[ ...
- 小白的linux笔记7:批量运行复杂的linux命令组合——BASH简单使用法
linux的BASH就相当于windows下的BAT文件,可以批处理命令.比如写好一个python脚本后,需要在运行时候加参数,但这个参数又不想每次输入,就可以用BASH的方式写好整条命令,然后直接运 ...
- Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
这篇文章主要介绍了Pythont特殊语法filter,map,reduce,apply使用方法,需要的朋友可以参考下(1)lambda lambda是Python中一个很有用的语法,它允许你快速定义单 ...
- egg 提交数据 防csrf 攻击 配置
await ctx.render('from',{csrf:this.ctx.csrf}); 或者 使用中间件 ctx.state.csrf = ctx.csrf;
- [开发技巧]·AttributeError: module 'pywt' has no attribute 'wavedec'解决方法
[开发技巧]·AttributeError: module 'pywt' has no attribute 'wavedec'解决方法 1.卸载 pywt pip uninstall pywt 2.安 ...
- linux中安装nginx时查看修改80端口时没有iptables文件的内容?? 求解