这道题又无耻的抄袭了别人的代码。

刚开始以为是最大匹配,把条件不相符的人连一起,然后求最大匹配,感觉麻烦,然后看了别人的解题报告,是把相符的人连一起,然后减去,其实就是最大独立集。

最大独立集=|G|-最大匹配。

首先先把性别分开,因为同性不能成为couple,然后把符合条件的异性连一起,然后就是最大匹配了。

#include<stdio.h>
#include<string.h>
#define maxn 505
#define maxl 106 struct Person
{
int h;
char music[maxl];
char sport[maxl];
} male[maxn], female[maxn]; int uN, vN, n;
bool g[maxn][maxn];
int visit[maxn],match[maxn];
int abs(int x)
{
if(x<)
return -x;
return x;
}
int DFS(int u)
{
for(int i=;i<vN;i++) if(!visit[i]&&g[u][i])
{
visit[i]=;
if(match[i]==- || DFS(match[i]))
{
match[i]=u;
return ;
}
}
return ;
} int MaxMatch()
{
memset(match,-,sizeof(match));
int ans=;
for(int i=;i<uN;i++)
{
memset(visit,,sizeof(visit));
if(DFS(i)) ans++;
}
return ans;
} void input()
{
scanf("%d", &n);
uN = vN = ;
for (int i = ; i < n; i++)
{
int a;
char sex[];
scanf("%d%s", &a, sex);
if (sex[] == 'M')
{
male[uN].h = a;
scanf("%s%s", male[uN].music, male[uN].sport);
uN++;
}
else
{
female[vN].h = a;
scanf("%s%s", female[vN].music, female[vN].sport);
vN++;
}
}
} bool couple(int a, int b)
{
if (abs(male[a].h - female[b].h) > )
return false;
if (strcmp(male[a].music, female[b].music))
return false;
if (strcmp(male[a].sport, female[b].sport) == )
return false;
return true;
} void make()
{
memset(g, , sizeof(g));
for (int i = ; i < uN; i++)
for (int j = ; j < vN; j++)
if (couple(i, j))
g[i][j] = true;
} int main()
{
int t;
scanf("%d", &t);
while (t--)
{
input();
make();
printf("%d\n", n - MaxMatch());
}
return ;
}

poj 2771 最大独立集的更多相关文章

  1. POJ 2771 最大独立集 匈牙利算法

    (为什么最大独立集的背景都是严打搞对象的( _ _)ノ|壁) 思路:匈牙利算法 没什么可说的-- // by SiriusRen #include <cstdio> #include &l ...

  2. poj——2771 Guardian of Decency

    poj——2771    Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5916   ...

  3. Poj(2771),最大独立集

    题目链接:http://poj.org/problem?id=2771 Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K To ...

  4. POJ 2771 Guardian of Decency 【最大独立集】

    传送门:http://poj.org/problem?id=2771 Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Tot ...

  5. POJ 2771 Guardian of Decency(最大独立集数=顶点数-最大匹配数)

    题目链接: http://poj.org/problem?id=2771 Description Frank N. Stein is a very conservative high-school t ...

  6. POJ 2771 二分图(最大独立集)

    Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5244   Accepted: 21 ...

  7. Guardian of Decency POJ - 2771 【二分匹配,最大独立集】

    Problem DescriptionFrank N. Stein is a very conservative high-school teacher. He wants to take some ...

  8. poj 2771 Guardian of Decency 解题报告

    题目链接:http://poj.org/problem?id=2771 题目意思:有一个保守的老师要带他的学生来一次短途旅行,但是他又害怕有些人会变成情侣关系,于是就想出了一个方法: 1.身高差距   ...

  9. POJ 2771 Guardian of Decency

    http://poj.org/problem?id=2771 题意: 一个老师想带几个同学出去,但是他怕他们会谈恋爱,所以带出去的同学两两之间必须满足如下条件之一: ①身高差大于40  ②同性 ③喜欢 ...

随机推荐

  1. 【机房系统知识小结点系列】之遍历窗体中的控件,判断Text是否为空?

    做机房系统时,几乎每个窗体中都会用到判断界面中的控件是否为空的情景.我们曾经是这样走来的: 第一版: 好处:对窗体界面中的Text等控件,逐一做判断,当用户输入某一项为空的时候,会议弹出框的形式,告诉 ...

  2. 依赖注入及AOP简述(六)——字符串请求模式 .

    2.     依赖注入对象的请求模式 前一节我们讨论了关于声明注入点的几种方法,这一节主要来介绍在注入点上如何定位到所需要的标识符的话题.基本上,我们可以用字符串为标识符来请求依赖对象.或者用全类名( ...

  3. 仅当使用了列的列表并且 IDENTITY_INSERT 为 ON 时,才能为表'SpeType'中的标识列指定显式值

     尊重原著作:本文转载自http://blog.163.com/lao12qi12345%40126/blog/static/1179155120101122113316187/ 情况描述 在表Tab ...

  4. c# 委托 delegate

    委托是一种存储函数引用的类型,在事件和事件的处理时有重要的用途 通俗的说,委托是一个可以引用方法的类型,当创建一个委托,也就创建一个引用方法的变量,进而就可以调用那个方法,即委托可以调用它所指的方法. ...

  5. [Tree]Binary Tree Preorder Traversal

    Total Accepted: 97599 Total Submissions: 257736 Difficulty: Medium Given a binary tree, return the p ...

  6. 商品列表中显示类别名称而不是类别ID

    商品表中的字段包裹商品信息和categoryid 若要在商品列表中显示出categoryname,有两种做法: 第一种做法: 拿到categoryid后再跟数据库连接一下,然后拿出categoryna ...

  7. android中viewPager实现的屏幕左右切换(入门篇)

    大多数的APP都可以实现几个屏幕来回的切换, 首先新建两个Activity,内容随意,布局随意.接下来在MainActivity.xml: <RelativeLayout xmlns:andro ...

  8. 移动端h5摇一摇事件

    // 摇一摇动作 //获取加速度信息 //通过监听上一步获取到的x, y, z 值在一定时间范围内的变化率,进行设备是否有进行晃动的判断. //而为了防止正常移动的误判,需要给该变化率设置一个合适的临 ...

  9. 自动注册服务NET Core扩展IServiceCollection

    NET Core扩展IServiceCollection自动注册服务 前言 在ASP.NET Core中使用依赖注入中使用很简单,只需在Startup类的ConfigureServices()方法中, ...

  10. setTimeout()与setInterval() 问题

    提示:setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout(). 1. setInterval(c ...