题意

有n个同学,给出同学之间的爱慕关系,选出一个集合使得集合中的人没有爱慕关系。问能选出的最大集合是多少。

分析

二分图的最大独立集。

最大独立集的意思是,在图中选出最多的点,使他们两两之间没有边,这个顶点的集合就是最大独立集。

先下结论:如果一个图是二分图,|最大独立集| = |V|-|最大匹配数|。

我们这么思考(设匹配数为\(v\)):

如果把二分图的最大匹配从原图中去掉,剩下的\(n-2v\)个顶点肯定是没有边相连的(如果还有边相连,我们可以一定可以再加入到匹配中,那还是个锤子的最大匹配)。此时剩下的顶点已经是一个独立集了。接下来,从每条匹配边的两端取一个结点加入独立集中,一定可以使得独立集仍然是独立集:因为对于最大匹配中的任意两个点,要么\(x\)到\(y\)有一条边,要么\(y\)到\(x\)有一条边,要么\(x\)到\(y\)没有边且\(x\)到\(y\)也没有边。这样就能得到这个题目的答案了。

注意:Hungry是针对有向图的,对于无向图match数成了原来的2倍,要除以2。这题除以2的原因和这个还不一样:由于题目没有给出哪些是男的哪些是女的(没有明显的二分图),所以我们是对二分图的两边去进行匹配的(还记得kuangbin的板子吗?在hungary算法中,我们只对一侧进行dfs操作)。所以最大匹配数应该是求出来的数除以2 。

代码

这题的输入格式比较特别,scanf社保之。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#define MP make_pair
#define PB push_back
#define fi first
#define se second
#define ZERO(x) memset((x), 0, sizeof(x))
#define ALL(x) (x).begin(),(x).end()
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, a, b) for (int i = (a); i >= (b); --i)
#define QUICKIO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define MS(x,y) memset(x,y,sizeof(x))
using namespace std; bool mat[1005][1005];
bool vis[1005];
int link[1005],n; int dfs(int u)
{
rep(i,0,n-1)
{
if(mat[u][i] && !vis[i])
{
vis[i]=true;
if(link[i]==-1 || dfs(link[i]))
{
link[i]=u; return true;
}
}
}
return false;
} int hungary()
{
MS(link,-1);
int res=0;
rep(i,0,n-1)
{
MS(vis,false);
if(dfs(i)) res++;
}
return res/2;
} int main()
{
while(scanf("%d",&n)==1)
{
ZERO(mat);
rep(i,1,n)
{
int x, k;
scanf("%d: (%d)", &x, &k);
rep(j,1,k)
{
int tmp;
scanf("%d", &tmp);
mat[x][tmp]=true;
}
}
printf("%d\n", n-hungary());
}
return 0;
}

「日常训练」Girls and Boys(HDU-1068)的更多相关文章

  1. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  2. 「日常训练」 神、上帝以及老天爷 (HDU 2048)

    题意 数论中的错排问题.记错排为Dn" role="presentation">DnDn,求Dnn!" role="presentation&q ...

  3. 「日常训练」 不容易系列之(3)—— LELE的RPG难题 (HDU 2045)

    题目简述 有排成一行的n" role="presentation">nn个方格,用红(Red).粉(Pink).绿(Green)三色涂每个格子,每格涂一色,要求任何 ...

  4. 「日常训练」 Fire!(UVA-11624)

    与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...

  5. 「日常训练」COMMON 约数研究(HYSBZ-1968)

    题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...

  6. 「日常训练」Mike and Feet(Codeforces Round #305 Div. 2 D)

    题意 (Codeforces 548D) 对一个有$n$个数的数列,我们要求其连续$x(1\le x\le n)$(对于每个$x$,这样的连续group有若干个)的最小数的最大值. 分析 这是一道用了 ...

  7. 「日常训练」 Mike and Fun (CFR305D2B)

    题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...

  8. 「日常训练」Common Subexpression Elimination(UVa-12219)

    今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...

  9. 「日常训练」Magic Stones(CodeForces-1110E)

    题意 给定两个数组c和t,可以对c数组中的任何元素变换\(c_i\)​成\(c_{i+1}+c_{i-1}-c_i\)​,问c数组在若干次变换后能否变换成t数组. 分析 这种魔法题目我是同样的没做过. ...

随机推荐

  1. 20145223 杨梦云 《网络对抗》 Web基础

    20145223 杨梦云 <网络对抗> Web基础 1.实验后回答问题 (1)什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分:(1) 表单标签:这里面包含了处理表 ...

  2. TCP Flow Control and Data Transfer

    TCP Flow Control TCP Data Transfer Selective Repeat ARQ with Positive ACK Window slides a byte basis ...

  3. 微信小程序禁止刷新之后苹果端还可以下拉的问题

    一.问题描述 最近在做一个小程序项目,需要禁止下拉刷新,于是在page.json里面添加了这段话 "enablePullDownRefresh":false 全局关闭下拉刷新,这段 ...

  4. 【Linux资源管理】使用sar进行性能分析

    sar可用于监控Linux系统性能,帮助我们分析性能瓶颈.sar工具的使用方式为”sar [选项] intervar [count]”,其中interval为统计信息采样时间,count为采样次数. ...

  5. git获取步骤

    $ git init $ git config --global user.name "[name]" $ git config --global user.email [emai ...

  6. zabbix 3.x 监控日志文件

    1.启用zabbix主动模式 在zabbix agent端,修改/etc/zabbix/zabbix_agentd.conf ServerActive=服务端IP Hostname=tspnginx0 ...

  7. JDBC中执行sql语句的 增 , 删 , 改 , 查 的方法

    executeQuery()  : 执行 SELECT 语句,它几乎是使用最多的 SQL 语句 executeUpdate() :   执行 INSERT.UPDATE 或 DELETE 语句以及 S ...

  8. Linux中JDK的安装步骤

    1.下载jdk安装包rpm格式安装 http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa8 ...

  9. vue2.0 接收url参数

    1) 路由配置传参方式在配置路由时 例如 "/firewall/authorize/:uid/:uname/:token"页面url为 http://XXX.com/firewal ...

  10. Python-知识点小计

    1.python赋值.浅拷贝.深拷贝区别:https://www.cnblogs.com/xueli/p/4952063.html: 2.python的hasattr(),getattr(),sett ...