POJ2771最大独立集元素个数
题意:
女生和男生之间只要满足四个条件中的一个,那么两个人就不会在一起!然后给出一些男生和女生,问最多多少人一起做活动彼此不会产生暧昧关系。
思路:
这样的问题还是比较裸的问法,就是再问最大独立集元素个数,左边是男,右边是女,建立二分图,然后可能暧昧的连接在一起,最后n-最大匹配数,就行了,还有就是很多人都不是很理解这个结论为什么是对的,我说下我的简单理解,我们可以这样想,分成两个集合,这两个集合之间的最大暧昧关系我们只要删除产生暧昧关系的两个人其中的一个(这个不是随意删除谁,要看当时情况,但是肯定可以删除其中一个人)这样最后剩下的就没有办法在组成暧昧关系了,如果还不理解想想二分匹配匈牙利算法的过程,匹配完之后剩下的已经没有办法在匹配了,那么剩下的肯定是独立的,然后在在匹配里面选择一半拿出来(不是随意现则),可以有方法做到剩下的一半与之前匹配剩下的都是独立的,这样答案就是n-匹配数.
#include<stdio.h>
#include<string.h>
#define N_node 500 + 50
#define N_edge 500 * 500 + 50
typedef struct
{
int a;
char b[5];
char c[105];
char d[105];
}NODE;
typedef struct
{
int to ,next;
}STAR;
NODE node[N_node];
STAR E[N_edge];
int list[N_node] ,tot;
int mkdfs[N_node] ,mkgx[N_node];
void add(int a ,int b)
{
E[++tot].to = b;
E[tot].next = list[a];
list[a] = tot;
}
int DFS_XYL(int x)
{
for(int k = list[x] ;k ;k = E[k].next)
{
int to = E[k].to;
if(mkdfs[to]) continue;
mkdfs[to] = 1;
if(mkgx[to] == -1 || DFS_XYL(mkgx[to]))
{
mkgx[to] = x;
return 1;
}
}
return 0;
}
int abss(int x)
{
return x > 0 ? x : -x;
}
int main ()
{
int i ,j ,t ,n;
scanf("%d" ,&t);
while(t--)
{
scanf("%d" ,&n);
for(i = 1 ;i <= n ;i ++)
scanf("%d %s %s %s" ,&node[i].a ,node[i].b ,node[i].c ,node[i].d);
memset(list ,0 ,sizeof(list));
tot = 1;
for(i = 1 ;i <= n ;i ++)
{
if(node[i].b[0] != 'M') continue;
for(j = 1 ;j <= n ;j ++)
{
if(node[j].b[0] == 'M') continue;
if(abss(node[i].a - node[j].a) > 40) continue;
if(strcmp(node[i].c ,node[j].c)) continue;
if(!strcmp(node[i].d ,node[j].d)) continue;
add(i ,j);
}
}
memset(mkgx ,255 ,sizeof(mkgx));
int ans = 0;
for(i = 1 ;i <= n ;i ++)
{
memset(mkdfs ,0 ,sizeof(mkdfs));
ans += DFS_XYL(i);
}
printf("%d\n" ,n - ans);
}
return 0;
}
POJ2771最大独立集元素个数的更多相关文章
- C++在数组元素个数未知情况下声明数组
我们都从书上学习的方法,定义一个数组需要数组名.类型以及数组元素个数,一般定义必须明确元素的个数,否则无法通过编译. 1. int a[]; 2. int n; int a[n]; 就想上面这两种情况 ...
- mybatis判断集合为空或者元素个数为零
mybatis判断集合为空或者元素个数为零: <if test="mlhs != null and mlhs.size() != 0"> and t.mlh_name ...
- CSS根据子元素个数不同定义样式
近日面试,遇见了一个这样的问题,不会,便记下来. 问题:如何根据子元素个数的不同定义不同的样式? 代码:HTML <ul> <li>1</li> <li> ...
- 获取数值型数组中大于60的元素个数,给数值型数组中不足60分的加20分。(数组,for循环,if条件判断语句)
package com.Summer_0420.cn; /** * @author Summer * 获取数值型数组中大于60的元素个数 * 给数值型数组中不足60分的加20分 */ public c ...
- int 存储大小 数组元素个数
为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符.表达式 sizeof(type) 得到对象或类型的存储字节大小.下面的实例演示了获取 int 类型的大小: 实例 # ...
- jQuery获取子元素个数的方法
//获取id=div1下的子元素的个数 $('#id').children().length; //获取id=div1下的p元素个数 $('#id').children('p').length;
- C#数组维数及不同维数中元素个数的获取
简单理解有关数组维数的概念: 1.编程中用到的多维的数组,最多也就是二维数组了 2.数组的维数从0开始计算 using System; using System.Collections.Generic ...
- 计算元素个数(count和count_if)
count 计算first和last之间与value相等于元素个数 template <class InputIterator,class EqualityComparable> type ...
- poj 1611 求0号结点所在集合的元素个数
求0号结点所在集合的元素个数 Sample Input 100 42 1 25 10 13 11 12 142 0 12 99 2200 21 55 1 2 3 4 51 00 0Sample Out ...
随机推荐
- Python学习笔记 CH1-4:从入门到列表
Python CH1 环境准备 因为已经有了C/C++.Java的基础,所以上手很快. 参考书:Eric Matthes -<Python编程 从入门到实践> 环境准备:python3.P ...
- add_header被覆盖 -配置错误
Nginx的配置文件分为Server.Location.If等一些配置块,并且存在包含关系,和编程语言比较类似.如果在外层配置的一些选项,是可以被继承到内层的. 但这里的继承也有一些特性,比如add_ ...
- 如何安装jenkins并简单的使用
如何安装jenkins并使用 一.jenkins 简介: Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括 : 1.持续的软件版本发布/测试项目: 2.监控外部调用 ...
- Java基础:运算符
算数运算符:+,-,*,/,%,++,-- 赋值运算符:= 关系运算符:>,<,>=,<=,==,!=,instanceof 逻辑运算符:&&,||,! 位运算 ...
- 修改RedHat7的root用户密码
前言 前段时间由于长时间没有使用虚拟机里面的一个操作系统,导致密码记得不是太清,登录不进去.今天想起还是做个小记录,以便以后参考. 再一个是,当时网上也搜了很多解决问题的博客,但大部分都是同一个博客内 ...
- Jmeter(三十八) - 从入门到精通进阶篇 - 命令行运行JMeter详解(详解教程)
1.简介 前边一篇文章介绍了如何生成测试报告,细心地小伙伴或者同学们可以看到宏哥启动Jmeter生成测试报告不是在gui页面操作的,而是在gui页面设置好保存以后,用命令行来生成测试报告的.这一篇宏哥 ...
- C++11正则表达式
- [倍增][换根DP]luogu P5024 保卫王国
题面 https://www.luogu.com.cn/problem/P5024 分析 可以对有限制的点对之间的链进行在倍增上的DP数组合并. 需要通过一次正向树形DP和一次换根DP得到g[0][i ...
- c/s应用程序自动更新组件GeneralUpdate3.2.1发布
一.组件简介 GeneralUpdate是基于.net standard 开发的一款(c/s应用)自动升级程序.该组件将更新的核心部分抽离出来方便应用于多种项目当中目前适用于wpf,控制台应用,win ...
- > 与 < 差在哪?-- Shell十三问<第十一问>
> 与 < 差在哪?-- Shell十三问<第十一问> 谈到 I/O redirection ,不妨先让我们认识一下 File Descriptor (FD) .程序的运算,在 ...