首页 技术 正文
技术 2022年11月16日
0 收藏 305 点赞 2,895 浏览 1204 个字

洛谷传送门

题目描述:

给出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),所以可以用结构体来存,然后通过两重循环判断线段是否相连。

——代码

 #include <cstdio>
#include <iostream>
#include <cstring> using namespace std; int n, lh, ll, cnt, sum;
int next[], to[], head[], g[];
bool vis[];
struct node
{
int pos, minn, maxx;
}h[], l[]; void add(int x, int y)
{
to[cnt] = y;
next[cnt] = head[x];
head[x] = cnt++;
} bool check(int i, int j)
{
if(h[i].pos < l[j].minn || h[i].pos > l[j].maxx) return ;
if(l[j].pos < h[i].minn || l[j].pos > h[i].maxx) return ;
return ;
} bool find(int u)
{
int i, v;
for(i = head[u]; i != -; i = next[i])
{
v = to[i];
if(!vis[v])
{
vis[v] = ;
if(!g[v] || find(g[v]))
{
g[v] = u;
return ;
}
}
}
return ;
} int main()
{
int i, j, x1, y1, x2, y2;
scanf("%d", &n);
memset(head, -, sizeof(head));
for(i = ; i <= n; i++)
{
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
if(x1 == x2)
{
++lh;
h[lh].pos = x1;
h[lh].minn = min(y1, y2);
h[lh].maxx = max(y1, y2);
}
else if(y1 == y2)
{
++ll;
l[ll].pos = y1;
l[ll].minn = min(x1, x2);
l[ll].maxx = max(x1, x2);
}
}
for(i = ; i <= lh; i++)
for(j = ; j <= ll; j++)
if(check(i, j))
add(i, j);
for(i = ; i <= lh; i++)
{
memset(vis, , sizeof(vis));
if(find(i)) sum++;
}
printf("%d", n - sum);
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,907
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,432
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,247
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,058
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,690
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,728