题目讲的是主人出去遛狗。图中有n个景点和m个好玩的地方,主人要沿直线走完n个景点,主人和狗的起点、终点一样,途中狗会离开主人去去一个好玩的地方(每次最多只能一个)并在下一个景点与主人会合,狗的速度是主人的两倍。问最多狗能去几个地方(景点数+能去的最多好玩地方),并且输出狗的行走路线;

构图:把主人走的路段作为X部,景点作为Y部。如果狗在某个路段能到达某个景点就将这两个连线。套用模板求得最大匹配即为狗能到达的最多好玩地方,再加上景点数即可;

Source Code

Problem: 1034   User: 541780774
Memory: 416K   Time: 63MS
Language: G++   Result: Accepted

Source Code

#include<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<math.h>  int nx, ny;             // X的點數目、Y的點數目   int mx[101], my[101];   // X各點的配對對象、Y各點的配對對象   bool vy[101];           // 紀錄Graph Traversal拜訪過的點   bool adj[101][101];     // 精簡過的adjacency matrix      // 以DFS建立一棵交錯樹   bool DFS(int x)   {       for (int y=0; y<ny; ++y)           if (adj[x][y] && !vy[y])           {               vy[y] = true;                  // 找到擴充路徑                 if (my[y] == -1 || DFS(my[y]))                {                  mx[x] = y; my[y] = x;                  return true;                  }           }       return false;   }      int bipartite_matching()   {       // 全部的點初始化為未匹配點。       memset(mx, -1, sizeof(mx));          memset(my, -1, sizeof(my));          // 依序把X中的每一個點作為擴充路徑的端點,       // 並嘗試尋找擴充路徑。       int c = 0;       for (int x=0; x<nx; ++x)   //    if (mx[x] == -1)    // x為未匹配點,這行可精簡。           {               // 開始Graph Traversal               memset(vy, false, sizeof(vy));               if (DFS(x)) c++;           }       return c;   }  main()  {           int i,j,n,m,p[101][2],q[101][2],ans;           double a,b,c;           while(scanf("%d%d",&n,&m)!=EOF)           {             memset(adj,0, sizeof(adj));              for(i=0;i<n;i++)                scanf("%d%d",&p[i][0],&p[i][1]);             for(i=0;i<m;i++)                scanf("%d%d",&q[i][0],&q[i][1]);             for(i=0;i<n-1;i++)             for(j=0;j<m;j++)             {               a=sqrt(pow(p[i][0]-p[i+1][0],2)+pow(p[i][1]-p[i+1][1],2));               b=sqrt(pow(q[j][0]-p[i][0],2)+pow(q[j][1]-p[i][1],2));               c=sqrt(pow(q[j][0]-p[i+1][0],2)+pow(q[j][1]-p[i+1][1],2));               if(b+c<=2*a)                 adj[i][j]=1;             }             nx=n-1;             ny=m;             printf("%d\n",n+bipartite_matching());             printf("%d %d ",p[0][0],p[0][1]);             for(i=0;i<n-1;i++)             {               if(my[mx[i]]==i)                printf("%d %d ",q[mx[i]][0],q[mx[i]][1]);               if(i!=n-2)               printf("%d %d ",p[i+1][0],p[i+1][1]);             }             printf("%d %d\n",p[n-1][0],p[n-1][1]);           }                           system("pause");     } 

转载于:https://www.cnblogs.com/zxj015/archive/2011/02/12/2740286.html

poj1034 The dog task 最大匹配相关推荐

  1. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  2. NOIP 好题推荐(DP+搜索+图论)POJ ZOJ

    NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS)  1090 Chain ->格雷码和二进制码 ...

  3. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  4. 如何使用Ajax技术开发Web应用程序(2)

    在上一篇文章中,我们讨论了如何通过javascript从一个远程XML文件中取得数据.在这篇文章中,我们将学会怎样对数据作更复杂的处理.作为一个示例,我们会准备一组XML数据,将数据分割成独立的片断并 ...

  5. 高通驱动开发参考(二)

    第1章 Driver相关模块介绍 1.1 REX简介 虽说目前QSC60x5平台上采用L4操作系统,REX只是L4上面的一个Task.但高通为了开发的兼容性,提供的API仍然采用老的一套接口(可能内部 ...

  6. Python 迁移学习实用指南:1~5

    原文:Hands-On Transfer Learning with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 深度学习 译文集],采用译后编辑(MT ...

  7. HDU - 3829 Cat VS Dog(最大独立集-二分图最大匹配)

    题目链接:点击查看 题目大意:给出n只狗和m只猫,现在有p个小朋友,每个小朋友都有一只喜欢的猫和一只不喜欢的狗,或者有一只喜欢的狗和一只不喜欢的猫,如果一个小朋友喜欢的动物还在,不喜欢的动物走了,那么 ...

  8. HDU - 2444——The Accomodation of Students(判断二分图,二分图最大匹配)

    题意: 题意: 有n个人,m对人相互认识: 问能否分成两个组,组内任意两个人之间不认识: 若不能,则输出No: 若能,则相互认识的两个人一间房,求最多需要几间房: 给出一些学生的认识情况,比如A和B认 ...

  9. 【HDU - 2444】The Accomodation of Students(二分图判断 + 匈牙利算法求最大匹配)

    题干: There are a group of students. Some of them may know each other, while others don't. For example ...

最新文章

  1. 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation
  2. stm32串口学习(一)
  3. linux 日志报告生成器,linux实战(一)----日志的截取-----文本过滤器grep、文本流式编辑器sed、报表生成器awk的运用...
  4. 《大话设计模式》Python 版代码实现
  5. MIP技术进展月报第2期: 数据绑定,异步脚本加速
  6. python分词统计词频_python jieba分词并统计词频后输出结果到Excel和txt文档方法
  7. C#调用系统蜂鸣(需要发出警告时挺好用的 即使没有声卡)
  8. Git—如何Windows操作系统中安装Git
  9. 信息熵,交叉熵,KL散度,JS散度之间的关系
  10. 香港股票交易成本计算器 android,股票交易手续费计算器
  11. 买到春节回家的票了吗?用Python刷票,还不快来试试!(建议收藏) 为回家做准备...
  12. c语言表达式判断语法错误题,C语言数据类型与表达式习题及答案.doc
  13. Java 使用嵌套 for 循环打印皇冠
  14. MySQL 5.7 中文全文检索
  15. 逆向工具Cutter
  16. java faker_Faker--伪造数据利器
  17. Java标识符规范书写规则
  18. 一些开源软件的国内镜像源
  19. 关于小红书的小程序不同数量的轮播图,展示不一样的轮播指示点的实现
  20. 三次B样条曲线拟合算法

热门文章

  1. 华为投的源杰半导体通过注册:9个月营收1.9亿 实控人为美国籍
  2. 超详细的springBoot学习教程,springboot学习看这篇就够了
  3. HTML5制作3D圣诞树效果
  4. 迭代法坐标系的建立原理
  5. ECharts 多个y轴时使用series.yAxisIndex给数据指定y轴
  6. oracle子查询 select语句,select查询之三:子查询
  7. php导出excel大小限制,PHP导出超限的PHPExcel
  8. 2018年7月30日初步熟悉ubuntu操作系统
  9. 抖音短视频SEO优化排名服务
  10. 这次破纪录的黑洞喷发可能会覆盖天空中的16次满月