luogu P2526 [SHOI2001]小狗散步 |二分图匹配
时间:2020-04-22
本文章向大家介绍luogu P2526 [SHOI2001]小狗散步 |二分图匹配,主要包括luogu P2526 [SHOI2001]小狗散步 |二分图匹配使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目背景
Grant喜欢带着他的小狗Pandog散步。Grant以一定的速度沿着固定路线走,该路线可能自交。Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇。小狗和主人同时从(X1,Y1)点出发,并同时在(Xn,Yn)点汇合。小狗的速度最快是Grant的两倍。当主人从一个点以直线走向另一个点时,Pandog跑向一个它感兴趣的景点。Pandog每次与主人相遇之前最多只去一个景点。
题目描述
你现在的任务是:为Pandog寻找一条路线(有可能与主人的路线部分相同),使它能够游览最多的景点,并能够准时与主人在给定地点相遇或者汇合。
输入格式
输入文件第一行是两个整数N和M( 1≤N,M≤100 );
输入文件第二行的N个坐标给出了Grant的散步路线,即Pandog和主人相遇地点;
输入文件第三行的M个坐标给出了所有Pandog感兴趣的景点。
所有输入的坐标均不相同,且绝对值不超过1000。
输出格式
输出小狗的移动路线。
第一行是经过的点数,第二行依次为经过的点的坐标(直角坐标系)
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e3+10;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int n,m;
struct node{
int x,y;
}a[N],b[N],c[N];
bool f[N][N];
inline double dis(node t1,node t2){
return sqrt((t1.x-t2.x)*(t1.x-t2.x)+(t1.y-t2.y)*(t1.y-t2.y));
}
bool vis[N];
int match[N];
int dfs(int u){
for(int i=1;i<=m;i++){
if(f[u][i]&&!vis[i]){
vis[i]=1;
if(!match[i]||dfs(match[i])){
match[i]=u;
return 1;
}
}
}
return 0;
}
bool ok[N];
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++)a[i].x=read(),a[i].y=read();
for(int i=1;i<=m;i++)b[i].x=read(),b[i].y=read();
for(int i=1;i<n;i++){
for(int j=1;j<=m;j++)
if(dis(a[i],a[i+1])>=(dis(a[i],b[j])+dis(a[i+1],b[j]))/2.0)
f[i][j]=1;
}
for(int i=1;i<n;i++){
memset(vis,0,sizeof(vis));
dfs(i);
}
int ans=n;
for(int i=1;i<=m;i++)
if(match[i])c[match[i]]=b[i],ans++,ok[match[i]]=1;
cout<<ans<<endl;
for(int i=1;i<=n;i++){
printf("%d %d ",a[i].x,a[i].y);
if(ok[i])printf("%d %d ",c[i].x,c[i].y);
}
}
原文地址:https://www.cnblogs.com/naruto-mzx/p/12753096.html
- python爬虫beautifulsoup4系列3
- 多元回归模型
- C++ STL之min_element()与max_element()(取容器中的最大最小值)
- RESTful API 设计最佳实践
- python爬虫beautifulsoup4系列4-子节点
- 元胞自动机实现多数分类算法
- 51Nod 1289 大鱼吃小鱼(模拟,经典好题)
- 用Metaclass实现一个精简的ORM框架
- HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
- Selenium2+python自动化63-二次封装(click/send_kesy)
- Selenium2+python自动化65-js定位几种方法总结
- HDU 2502 月之数(二进制,规律)
- Tensorflow实战系列:手把手教你使用CNN进行图像分类(附完整代码)
- HDU 2503 a/b + c/d(最大公约数与最小公倍数,板子题)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法