洛谷传送门

题目描述:

给出N平行于坐标轴的线段,要你选出尽量多的线段使得这些线段两两没有交点(顶点也算),横的与横的,竖的与竖的线段之间保证没有交点,输出最多能选出多少条线段。

因为横的与横的,竖的与竖的没有交点,所以直接把相交的线段相连,然后肯定是个二分图。

选出多少个线段,就是求二分图的最大独立集,等于节点数(N) - 最大匹配数。

由于线段的4个坐标太大 (X1_i, Y1_i) and (X2_i, Y2_i) (1 <= X1_i, Y1_i, X2_i, Y2_i <= 1,000,000,000),不能用二维矩阵来记录。

又看到线段数量很少 (1 <= N <= 250),所以可以用结构体来存,然后通过两重循环判断线段是否相连。

——代码

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4
 5 using namespace std;
 6
 7 int n, lh, ll, cnt, sum;
 8 int next[62501], to[62501], head[251], g[251];
 9 bool vis[251];
10 struct node
11 {
12     int pos, minn, maxx;
13 }h[10001], l[10001];
14
15 void add(int x, int y)
16 {
17     to[cnt] = y;
18     next[cnt] = head[x];
19     head[x] = cnt++;
20 }
21
22 bool check(int i, int j)
23 {
24     if(h[i].pos < l[j].minn || h[i].pos > l[j].maxx) return 0;
25     if(l[j].pos < h[i].minn || l[j].pos > h[i].maxx) return 0;
26     return 1;
27 }
28
29 bool find(int u)
30 {
31     int i, v;
32     for(i = head[u]; i != -1; i = next[i])
33     {
34         v = to[i];
35         if(!vis[v])
36         {
37             vis[v] = 1;
38             if(!g[v] || find(g[v]))
39             {
40                 g[v] = u;
41                 return 1;
42             }
43         }
44     }
45     return 0;
46 }
47
48 int main()
49 {
50     int i, j, x1, y1, x2, y2;
51     scanf("%d", &n);
52     memset(head, -1, sizeof(head));
53     for(i = 1; i <= n; i++)
54     {
55         scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
56         if(x1 == x2)
57         {
58             ++lh;
59             h[lh].pos = x1;
60             h[lh].minn = min(y1, y2);
61             h[lh].maxx = max(y1, y2);
62         }
63         else if(y1 == y2)
64         {
65             ++ll;
66             l[ll].pos = y1;
67             l[ll].minn = min(x1, x2);
68             l[ll].maxx = max(x1, x2);
69         }
70     }
71     for(i = 1; i <= lh; i++)
72      for(j = 1; j <= ll; j++)
73       if(check(i, j))
74        add(i, j);
75     for(i = 1; i <= lh; i++)
76     {
77         memset(vis, 0, sizeof(vis));
78         if(find(i)) sum++;
79     }
80     printf("%d", n - sum);
81     return 0;
82 }

View Code

转载于:https://www.cnblogs.com/zhenghaotian/p/6702200.html

[USACO11NOV]牛的障碍Cow Steeplechase(匈牙利算法)相关推荐

  1. P3033 [USACO11NOV]牛的障碍Cow Steeplechase

    P3033 [USACO11NOV]牛的障碍Cow Steeplechase 题目描述 详见:P3033 [USACO11NOV]牛的障碍Cow Steeplechase solution 裸题. 对 ...

  2. 牛的障碍Cow Steeplechase

    题目描述 Farmer John has a brilliant idea for the next great spectator sport: Cow Steeplechase! As every ...

  3. 洛谷 3029 [USACO11NOV]牛的阵容Cow Lineup

    https://www.luogu.org/problem/show?pid=3029 题目描述 Farmer John has hired a professional photographer t ...

  4. P3033 [USACO11NOV]Cow Steeplechase G

    P3033 [USACO11NOV]Cow Steeplechase G 提交1.80k 通过638 时间限制1.00s 内存限制125.00MB 提交答案加入题单 复制题目 题目提供者FarmerJ ...

  5. 2022牛客多校十 E-Reviewer Assignment(匈牙利算法)

    题目链接:登录-专业IT笔试面试备考平台_牛客网 题目: 样例输入: 5 3 010 010 101 011 100 样例输出: 2 2 1 3 1 题意:给定n个人和m篇文章,然后给出一个n*m的矩 ...

  6. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  7. 匈牙利算法——转自:BYVoid

    匈牙利算法 链接: USACO 4.2.2 The Perfect Stall 完美的牛栏 stall4 这是一种用增广路求二分图最大匹配的算法.它由匈牙利数学家Edmonds于1965年提出,因而得 ...

  8. 信息学奥赛一本通 1343:【例4-2】牛的旅行 | 洛谷 P1522 [USACO2.4] 牛的旅行 Cow Tours

    [题目链接] ybt 1343:[例4-2]牛的旅行 洛谷 P1522 [USACO2.4] 牛的旅行 Cow Tours [题目考点] 1. 图论 最短路径 Floyd算法 Floyd算法时间复杂度 ...

  9. 二分图最大匹配——匈牙利算法

    二分图最大匹配 (一).二分图的介绍 1.定义 2.充要条件 (二).二分图的匹配 1.二分图的最大匹配 2.增广路径 3.匈牙利算法 (1).复杂度 (2).算法思路 (3).代码实现 (一).二分 ...

最新文章

  1. java gc full gc_记一次Java服务频繁Full GC的排查过程
  2. linux rsync
  3. 网络的概念与网络的基本分类
  4. JAVA实例,判断是否是瑞年
  5. 三年级计算机击键要领教案,闽教版信息技术三上《下行键操作》教案
  6. 双十一期间快递员凌晨送件 将下班程序员误认成小偷
  7. 将txt文件转换成xlsx文件及用matlab读取xlsx
  8. TCP协议-TCP粘包问题
  9. 如何看懂财务报表:(二)财务报表目录解释
  10. windows下删除文件:提示无法删除文件,无法读源文件或磁盘
  11. 汇率换算(android安卓版)
  12. Linux安装redis及使用
  13. 养成良好的编程习惯-一个库一个文件夹
  14. conductor restart和rerun机制
  15. oracle忘记密码找回
  16. 解决tensorflow 调用bug Running model failed:Invalid argument: NodeDef mentions attr 'dilations'
  17. envi处理海思一号数据全过程详解
  18. vue 移动端头像裁剪_vue头像上传裁剪组件_一个漂亮的Vue组件,用于图像裁剪和上传...
  19. PHY--RSRP、RSRQ、RSSI和SINR
  20. 中级经济师备考:房建专业教材精讲分析

热门文章

  1. 过河 2005年NOIP全国联赛提高组(离散化+dp)
  2. 自己写一个轻量的JqueryGrid组件
  3. 兼容及DOM解释差异笔记——待续
  4. jQuery EasyUI API 中文文档 - 日期框(DateBox)
  5. spring mvc web.xml 例子
  6. leetcode算法题--合并两个有序数组
  7. gcc的调试调研——gdb
  8. 基于Clang的缓存型C++编译器Zapcc开源
  9. ios 自定义加载动画效果
  10. 团队作业4——第一次项目冲刺(Alpha版本)-第一篇