题目背景

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。

输出格式:

输出小狗的移动路线。

第一行是经过的点数,第二行依次为经过的点的坐标(直角坐标系)

输入输出样例

输入样例#1:

4 5 1 4 5 7 5 2 -2 4

-4 -2 3 9 1 2 -1 3 8 -3

输出样例#1:

6 1 4 3 9 5 7 5 2 1 2 -2 4

solution

这道题中的所有点显然是分成两类的,一类是小狗想走的,另一类是主人想走的,因为主人走的路是固定的,而且小狗一定要与主人在主人要走的地点相遇,而小狗的速度是主人的两倍,因此这两个点有没有边连就可以通过这个计算,显然要求小狗最多能够到的它想到的地点就是求二分图最大匹配,匈牙利算法就可以了所以这道题洛谷评价的难度过高了

#include<bits/stdc++.h>using namespace std;const int MAXN = 1001;inline int read()
{int f=1;int x=0;char ch;do{ch = getchar ();if(ch=='-') f=-1; }while(ch<'0'||ch>'9');do{x=x*10+ch-'0';ch=getchar(); }while(ch>='0'&&ch<='9');return f*x;
}int n,m;
bool ma[MAXN][MAXN]={false};
bool vis[MAXN]={false};
int l[MAXN];
int ans=0;struct node
{int x;int y;
};
node p[MAXN],d[MAXN];inline double dis(node a,node b)
{return sqrt(abs(a.x-b.x)*abs(a.x-b.x)+abs(a.y-b.y)*abs(a.y-b.y));
}inline bool dfs(int u)
{for(int i=1;i<=n-1;i++){if(!vis[i]&&ma[u][i]==true){vis[i]=true;if(l[i]==0||dfs(l[i])){l[i]=u;return true;}}} return false;
} int main()
{n=read();m=read();for(int i=1;i<=n;i++){p[i].x=read();p[i].y=read();}for(int i=1;i<=m;i++){d[i].x=read();d[i].y=read(); }for(int i=1;i<=n-1;i++){for(int j=1;j<=m;j++){if(dis(p[i],p[i+1])>(dis(p[i],d[j])+dis(d[j],p[i+1]))/2){ma[j][i]=true;}}}for(int i=1;i<=m;i++){memset(vis,false,sizeof(vis));if(dfs(i)) ans++;}cout<<ans+n<<endl;for(int i=1;i<=n;i++){cout<<p[i].x<<" "<<p[i].y<<" ";if(l[i]) cout<<d[l[i]].x<<" "<<d[l[i]].y<<" "; }
} 

提示:

这道题没有SPJ,注意输出的顺序

转载于:https://www.cnblogs.com/wlzs1432/p/8869050.html

[SHOI2001]小狗散步相关推荐

  1. 省选专练 [SHOI2001]小狗散步

    神TM建图掐精度 明显把旅游景点和相遇点看做二分图 然后nm扫一遍看跑不跑得到 然后Hungary 然后利用matching数组得到位置 #include<cstdio> #include ...

  2. 【青少年编程】【一级】小狗散步

    Scratch竞赛交流群已成立(适合6至18周岁的青少年),公众号后台回复[Scratch],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载"可获取以往学习 ...

  3. scratch小狗散步 电子学会图形化scratch编程等级考试一级真题编程题答案2019-5

    目录 scratch小狗散步 一.题目要求 1.准备工作 2.功能实现

  4. [匈牙利] 洛谷 P2526 小狗散步

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

  5. 不善待小狗的主人畜生不如

    以前在马路上看到小狗被撞被压的事,觉得小狗挺可怜的,心想主人怎么不牵好小狗,今天我也碰到这事,四五十岁的夫妻带着两只小狗也不牵绳子在马路上散步,马路只能够两辆汽车并排开,小狗看汽车从身边过来过去也害怕 ...

  6. 全网推荐的理财小白必读书目《小狗钱钱》,有那么好吗?

    既然今天说的是书,那么我们先一起思考一个问题吧,什么样的书算是一本好书?其实这个问题跟什么样的饭算一顿好饭是一个道理. 不同的人,在不同的人生阶段对一本书是好是坏的评价标准一定是不同的,想考专八的人, ...

  7. 《小狗钱钱》摘录——2019年04月14日19:11:50

    小狗钱钱(套装全2册,风靡欧美的财富启蒙,性格养成少儿读物): <小狗钱钱><小狗钱钱2> [德]博多·舍费尔 第一章 白色的拉布拉多犬 标注(黄色) - 位置 324 &qu ...

  8. 《小狗钱钱》--chapter6.7.8--如何逃离债务问题

    [第6章]爸爸妈妈犯下的错 吉娅开始带邻居的狗散步,并且教会了它一些本领,当她第一次领到20马克的酬劳时候,她觉得自己赚钱太容易了,邻居告诉她说: 大多数人都认为工作是一件艰苦而令人不愉快的事情,其实 ...

  9. 主人牵狗散步晕倒丧命 忠犬不离含泪守殡棺

    主人晕倒后,它守在主人身边,狂吠求助 主人被送往医院,它跳着也要上急救车 主人身亡后,它趴在殡棺上,不愿意离开 男子晕倒 医生施救 昨日上午10点,52岁的胡长荣牵着狗儿在渝中区佛图关公园内散步时,突 ...

最新文章

  1. OpenSource的开发模式探讨
  2. 1使用帝国cms开发微信小程序之开发前的约定
  3. Lua学习笔记(2)
  4. Python数据可视化实战应用万字长文从入门到高端(建议收藏)
  5. Google Gson的使用方法及JSON 技术对比
  6. 多进程与多线程的区别
  7. python 伪多线程_Python实现简单多线程任务队列
  8. 电影里看到程序员一台电脑装2个显示屏,这样有什么优点?
  9. 解决win7光驱驱动找不到的问题
  10. applicationhostconfig
  11. python如何安装scrapy库_Python爬虫:Scrapy框架的安装和基本使用
  12. vs2015安装vs assist 教程
  13. Vue源码学习目录(持续更新中)
  14. php下载excel乱码,如何解决php下载excel乱码的问题
  15. vue 手写签名_真正的艺术签名!让你的名字充满明星范!
  16. 如何解决浏览器未安装FLASH控件的提示
  17. Thinkphp5结合layer导入excel
  18. 喜剧院线电影《大夫我没病》在京开机
  19. mysql分组排序取每组第一条
  20. 网站外网访问以及如何申请域名

热门文章

  1. 什么是数据库触发器?
  2. 在启动时从配置文件中读取对象
  3. bootstrap 2021-04-20
  4. SpringMvc JavaMailSenderImpl 邮件发送时到时前端无法接受Json数据问题解决
  5. js 正则判断用户是否输入表情
  6. JS计算两个日期时间差,天 小时 分 秒格式
  7. 可以练计算机应用基础的网址,计算机应用基础(第3版)章节练习题答案
  8. linux裸机串口,裸机系列-UART串口
  9. 计算机xp的解释,2017职称计算机考点:Windowsxp系统注册表的技巧
  10. python for android 安装配置_mac appium for android 环境搭建 (appium python pycharm)