[luoguP2526] [SHOI2001]小狗散步(二分图最大匹配)
简直就是模板题啊!
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#define N 101 using namespace std; int n, m, cnt;
int X1[N], Y1[N], X2[N], Y2[N], head[N], to[N * N], nex[N * N], belong[N], ans[N];
bool vis[N]; inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} inline void add(int x, int y)
{
to[cnt] = y;
nex[cnt] = head[x];
head[x] = cnt++;
} inline double dis(double a, double b, double c, double d)
{
return sqrt((a - c) * (a - c) + (b - d) * (b - d));
} inline bool dfs(int u)
{
int i, v;
for(i = head[u]; ~i; i = nex[i])
{
v = to[i];
if(!vis[v])
{
vis[v] = 1;
if(!belong[v] || dfs(belong[v]))
{
belong[v] = u;
return 1;
}
}
}
return 0;
} inline int solve()
{
int i, ret = 0;
for(i = 1; i < n; i++)
{
memset(vis, 0, sizeof(vis));
ret += dfs(i);
}
return ret;
} int main()
{
int i, j;
double x, y, z;
n = read();
m = read();
memset(head, -1, sizeof(head));
for(i = 1; i <= n; i++)
X1[i] = read(), Y1[i] = read();
for(i = 1; i <= m; i++)
X2[i] = read(), Y2[i] = read();
for(i = 1; i < n; i++)
{
x = dis(X1[i], Y1[i], X1[i + 1], Y1[i + 1]);
for(j = 1; j <= m; j++)
{
y = dis(X1[i], Y1[i], X2[j], Y2[j]);
z = dis(X1[i + 1], Y1[i + 1], X2[j], Y2[j]);
if(x * 2 + 1e-9 >= y + z) add(i, j);
}
}
printf("%d\n", solve() + n);
for(i = 1; i <= m; i++) ans[belong[i]] = i;
for(i = 1; i <= n; i++)
{
printf("%d %d ", X1[i], Y1[i]);
if(ans[i]) printf("%d %d ", X2[ans[i]], Y2[ans[i]]);
}
return 0;
}
[luoguP2526] [SHOI2001]小狗散步(二分图最大匹配)的更多相关文章
- [SHOI2001] 小狗散步 - 二分图匹配
		
考虑到每次与主人相遇之前最多只去一个景点,很容易转化为匹配问题 由于数据很小,我们不妨枚举每个相遇点间隙和每个景点,判断是否来得及,如果来得及就连边 沙雕题搞了二十来分钟,我是憨憨 #include ...
 - luoguP2526_[SHOI2001]小狗散步_二分图匹配
		
luoguP2526_[SHOI2001]小狗散步_二分图匹配 题意: Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点 ...
 - 洛谷P2526 [SHOI2001]小狗散步(二分图匹配)
		
题目背景 Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇.小狗和主人同时从(X1,Y1 ...
 - SHOI2001 小狗散步
		
题目传送门 感觉这题最大的难点是发现它的解法是二分图最大匹配 主人的路线是固定的,对于每一段的路线,我们可以枚举小狗想去的景点,如果时间够,我们就将这段路线的起点和小狗想去的点连起来 这样就形成了一个 ...
 - [P2526][SHOI2001]小狗散步
		
Link: P2526 传送门 Solution: 一道提示非常到位的题目 题面中强调了在两个路径相邻点间只能再去至多一个点,且每个点只计算一次贡献 于是明显可以将原题看作询问在两个不相交点集间最多能 ...
 - luogu2526 [SHOI2001]小狗散步
		
注意一个景点只能去一次. #include <iostream> #include <cstring> #include <cstdio> #include < ...
 - 洛谷P2526 【SHOI2001】小狗散步
		
原题传送门 题目背景 Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇.小狗和主人同时从 ...
 - 【BZOJ4443】[Scoi2015]小凸玩矩阵 二分+二分图最大匹配
		
[BZOJ4443][Scoi2015]小凸玩矩阵 Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或 ...
 - [luogu4251 SCOI2015] 小凸玩矩阵 (二分图最大匹配)
		
传送门 Description Input Output 输出包含一行,为选出的 n 个数中第 k 大数的最小值. Sample Input 输入样例1: 2 3 1 1 2 4 2 4 1 输入样例 ...
 
随机推荐
- 结构化查询语言-SQL
			
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程 ...
 - StatementHandler-Mybatis源码系列
			
内容更新github地址:我飞 StatementHandler接口 StatementHandler封装了Mybatis连接数据库操作最基础的部分.因为,无论怎么封装,最终我们都是要使用JDBC和数 ...
 - javaweb基础(6)_servlet配置参数
			
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...
 - Oracle数据库常用的Sql语句整理
			
Oracle数据库常用的Sql语句整理 查看当前用户的缺省表空间 : select username,default_tablespace from user_users; 2.查看用户下所有的表 : ...
 - [转载]matlab图像处理为什么要归一化和如何归一化
			
matlab图像处理为什么要归一化和如何归一化,一.为什么归一化1. 基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响.也就是转换成唯一的标准形式以抵抗仿射变 ...
 - [LUOGU]P1508 Likecloud-吃、吃、吃
			
题目背景 问世间,青春期为何物? 答曰:"甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!" 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日 ...
 - js cookie 操作
			
<html> <head> <meta charset="utf-8"> <title>Javascript cookie</ ...
 - Docker 学习基本操作与守护式容器
			
Docker 学习基本操作与守护式容器 容器操作 运行容器 docker run --name指定名字 -istdin -ttty虚拟终端 在终端中用 exit 即可退出容器,并结束运行 查看容器 p ...
 - Codeforces Round #505 D. Recovering BST(区间DP)
			
首先膜一发网上的题解.大佬们tql. 给你n个单调递增的数字,问是否能够把这些数字重新构成一棵二叉搜索树(BST),且所有的父亲结点和叶子结点之间的gcd > 1? 这个题场上是想暴力试试的.结 ...
 - 使用fio测试磁盘I/O性能
			
简介: fio是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, nu ...