zoukankan      html  css  js  c++  java
  • POJ2536 二分图匹配

    题意:
         有n只老鼠,m个洞,每个洞最多可以藏一只老鼠,每个老鼠的移动速度都是v,给你他们的当前坐标,和洞的坐标,突然老鹰来了,他们必须在s秒内跑到一个洞藏起来,问你最少有多少只老鼠被抓走了。


    思路:

          二分图匹配裸题,关键就是那句一个洞最多容一只老鼠,对于每个老鼠连接能在s秒内到达的所有洞,然后一边最大匹配,得到的就是最大的藏起来的老鼠sum,输出n - sum就是最少的被抓走的老鼠。


    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    
    #define N_node 100 + 10
    #define N_edge 10000 + 100
    
    typedef struct
    {
       int to ,next;
    }STAR;
    
    typedef struct
    {
       double x ,y;
    }NODE;
    
    STAR E[N_edge];
    NODE node1[N_node] ,node2[N_node];
    int list[N_node] ,tot;
    int mk_dfs[N_node] ,mk_gx[N_node];
    
    void add(int a ,int b)
    {
       E[++tot].to = b;
       E[tot].next = list[a];
       list[a] = tot;
    }
    
    double dis(NODE a ,NODE b)
    {
       double tmp = (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
       return sqrt(tmp);
    }
    
    int DFS_XYL(int s)
    {
       for(int k = list[s] ;k; k = E[k].next)
       {
          int to = E[k].to;
          if(mk_dfs[to]) continue;
          mk_dfs[to] = 1;
          if(mk_gx[to] == -1 || DFS_XYL(mk_gx[to]))
          {
             mk_gx[to] = s;
             return 1;
          }
       }
       return 0;
    }
    
    int main ()
    {
       int n ,m ,i ,j;
       double s ,v;
       while(~scanf("%d %d %lf %lf" ,&n ,&m ,&s ,&v))
       {
          for(i = 1 ;i <= n ;i ++)
          scanf("%lf %lf" ,&node1[i].x ,&node1[i].y);
          for(i = 1 ;i <= m ;i ++)
          scanf("%lf %lf" ,&node2[i].x ,&node2[i].y);
          memset(list ,0 ,sizeof(list));
          tot = 1;
          for(i = 1 ;i <= n ;i ++)
          for(j = 1 ;j <= m ;j ++)
          {
             if(dis(node1[i],node2[j]) / v <= s)
             add(i ,j);
          }
          memset(mk_gx ,255 ,sizeof(mk_gx));
          int sum = 0;
          for(i = 1 ;i <= n ;i ++)
          {
             memset(mk_dfs ,0 ,sizeof(mk_dfs));
             sum += DFS_XYL(i);
          }
          printf("%d
    " ,n - sum);
       }
       return 0;
    }
    


      
  • 相关阅读:
    tuple 元组及字典dict
    day 49 css属性补充浮动 属性定位 抽屉作业
    day48 选择器(基本、层级 、属性) css属性
    day47 列表 表单 css初识
    day 46 http和html
    day 45索引
    day 44 练习题讲解 多表查询
    day 40 多表查询 子查询
    day39 表之间的关联关系、 补充 表操作总结 where 、group by、
    day38 数据类型 约束条件
  • 原文地址:https://www.cnblogs.com/csnd/p/12063084.html
Copyright © 2011-2022 走看看