Description

“那么真的有果尔德施坦因这样一个人?”他问道。
“是啊,有这样一个人,他还活着。至于在哪里,我就不知道了。”
“那么那个密谋——那个组织?这是真的吗?不是秘密警察的捏造吧?”
“不是,这是真的。我们管它叫兄弟会。除了它确实存在,你们是它的会员以外,你们 就别想知道别的了。”

他知道的是,这种思想一定会一代一代地传下去,他们一定能够在没有黑暗的地方再会。

他不知道的是,兄弟会已经走到了崩溃的边缘;思想警察早已无孔不入;那没有黑暗的地方, 是友爱部,是 101 室……

兄弟会的头目之一,爱麦虞埃尔•果尔德施坦因,正在谋划着一场无力的反抗。这抗争的内容,竟是一场宏大的舞会。(这作为小资情调、腐朽没落的代表,以及未经允许的群众运动, 是大洋国严格禁止的(甚至是 crimethink))这也是为了加强组织的团结,并且为那终将到来的最后一战而激励、鼓舞士气。
众所周知,兄弟会为了避免思想警察的追捕,保密措施相当严密。会内一位高级干部奥勃良如此说:“从你们切身经验来说,你们永远连十来个会员也不认识。”(注意:测试数据可能不符合这句话)具体来说,每个人只认识他的全部上司。一个人的上司要么是他的直接上司
(在输入中会向你给出,并且可能不止一人),要么是这个人的某个上司的直接上司。为了增进同志之间的感情,同时为了防止渗入兄弟会的间谍破获整个组织的组成与结构,果尔德 施坦因想要确保在舞会中任意两个人都互不相识。
真理部的外围党员温斯顿在奥勃良的介绍下加入了兄弟会。他刚刚知道了这个激动人心的舞 会,仿佛又感受到了那若有若无的、来自旧时代的温暖。因为参与舞会的人越多,他与他亲爱的裘莉亚就越有可能重逢,所以他很好奇最多能有多少人参与。

Input

第一行两个正整数 N,M,表示兄弟会的会员人数以及关系数。然后 M 行,每行 2 个正整数 x,y(1<=x,y<=N,x≠y),表示 x 是 y 的直接上司(即 y 是 x 的直接下属)。

Output

输出一行一个整数,表示参加舞会的最多人数。

Sample Input

4 4
1 2
2 4
1 3
3 4

Sample Output

2

Data Constraint

对于 5%数据,满足 n<=5。
对于 20%数据,满足 n<=20。
对于另 10%数据,满足会员构成一棵外向树,即:除了一号会员(即果尔德施坦因本人)之外的每个会员,恰好只有一个上司,且一号会员没有上司。
对于另 10%数据,满足会员构成一颗内向树,即:除了一号会员(即温斯顿)之外的每个会员,恰好只有一个直接下属,且一号会员没有下属。
对于另 30%数据,满足每个会员要么没有上司,要么没有下属。

对于 100%数据,满足 n<=200,关系不会重复出现,且不会自相矛盾(即 A 既是 B 的上司也是 B 的下属)。换句话说,关系构成了一张无重边的有向无环图。保证图联通。

题解

这个就是求一个DAG的最大独立集,
有一个结论最大独立集就等于n-最大匹配,
于是就是二分图匹配了。
构图就是将一个点跟他能到达的所有点连边。

code

#include <queue>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <cmath>
#include <math.h>
#include <time.h>
#define ll long long
#define N 203
#define M 103
#define db double
#define P putchar
#define G getchar
#define inf 998244353
#define pi 3.1415926535897932384626433832795
using namespace std;
char ch;
void read(int &n)
{n=0;ch=G();while((ch<'0' || ch>'9') && ch!='-')ch=G();ll w=1;if(ch=='-')w=-1,ch=G();while('0'<=ch && ch<='9')n=(n<<3)+(n<<1)+ch-'0',ch=G();n*=w;
}int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}
ll abs(ll x){return x<0?-x:x;}
ll sqr(ll x){return x*x;}
void write(ll x){if(x>9) write(x/10);P(x%10+'0');}int nxt[N*N],to[N*N],lst[N],tot;
int nxt_[N*N],to_[N*N],lst_[N],tot_;
int n,m,x,y;
int ans,bz[N],g[N],st;void ins_(int x,int y)
{nxt_[++tot_]=lst_[x];to_[tot_]=y;lst_[x]=tot_;
}void dfs(int x)
{if(x!=st)ins_(st,x);bz[x]=0;for(int i=lst[x];i;i=nxt[i])if(bz[to[i]])dfs(to[i]);
}void ins(int x,int y)
{nxt[++tot]=lst[x];to[tot]=y;lst[x]=tot;
}bool find(int x)
{int y;for(int i=lst_[x];i;i=nxt_[i]){y=to_[i];if(bz[y])continue;bz[y]=1;if(g[y]==0 || find(g[y])){g[y]=x;return 1;}}return 0;
}int main()
{freopen("dance.in","r",stdin);freopen("dance.out","w",stdout);read(n);read(m);for(int i=1;i<=m;i++)read(x),read(y),ins(x,y);for(st=1;st<=n;st++){memset(bz,1,sizeof(bz));dfs(st);}ans=n;for(int i=1;i<=n;i++){memset(bz,0,sizeof(bz));ans=ans-find(i);}printf("%d\n",ans);return 0;
}

JZOJ5857. 【NOIP提高组模拟A组2018.9.8】没有上司的舞会相关推荐

  1. JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会

    题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...

  2. JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点

    Description Input Output Sample Input 4 4 2 a a b b a a b b c c d d c c d d 1 1 3 3 2 2 3 1 1 3 2 2 ...

  3. 【二分,找规律】Day 14 提高组模拟C组 T1 小麦亩产一千八

    题目大意 给定斐波那契的第aaa项,求出第b" role="presentation">bbb项,默认第0项为1 解题思路 方法一:递推 找到规律后O(b)O(b) ...

  4. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  5. 5814. 【NOIP提高A组模拟2018.8.14】 树(期望 + 倍增)

    5814. [NOIP提高A组模拟2018.8.14] 树 Problem 给定一棵nnn个点的树,m" role="presentation">mmm次询问,每次 ...

  6. JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树

    梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...

  7. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  8. {小结}2016.6.11【初中部 NOIP提高组 】模拟赛C

    2016.6.11[初中部 NOIP提高组 ]模拟赛C No.1!!! 100+33.3+10+90=233.3 23333 1298. 牛棚(graze2.pas/c/cpp) 题解 1299. 洗 ...

  9. 2021.01.14【NOIP提高B组】模拟 总结

    2021.01.14[NOIP提高B组]模拟 总结 第一题 Candy 奇奇怪怪的题目. 一开始没有理解题目,其实就是同时变换. 打了一个暴力. 本人随机生成50000组数据,都过了,时间没超.希望出 ...

  10. 2020.08.08【NOIP提高组】模拟:奶牛的图片 总结

    2020.08.08[NOIP提高组]模拟:奶牛的图片 总结 Description Farmer John希望给他的 N ( 1 ≤ N ≤ 100 , 000 ) N(1\leq N\leq100 ...

最新文章

  1. MySQL里 unique 用法_mysql中unique key中在查询中的使用
  2. STP中各算法接口开销(COST)计算方式
  3. 建模算法(八)——插值
  4. HaDoop安装配置笔记
  5. js 全国城市地区编码+拼音+大写首字母
  6. 感谢CSDN编辑精心采访--将人文融入到科技产品中
  7. 在华为能拿多少工资,揭秘一个真实的华为!
  8. 如何给论文添加参考文献
  9. 双纵坐标绘图-Plotyy
  10. 安装sql server 2008时的错误,针对SQL Server 注册表项的一致性验证失败​
  11. php3d饼状图的教学,php使用Jpgraph创建3D饼形图效果示例
  12. S3Browser配置、使用与允许跨域设置
  13. Android开发经验
  14. Linux 下如何添加一个普通用户,并给予用户root权限
  15. ElementUI 获取el-table表格选中行信息及清除选中行
  16. sfc /scannow扫描修复系统文件命令怎么用_马立杰_新浪博客
  17. 论文排版2-Latex排版
  18. 假期一周学习计划_我在假期很烂-这周我做了什么
  19. linux系统sip网络电话,Yealink网络电话SIP-T38G绝对路径遍历漏洞
  20. 使用Office Tool Plus下载Office和Visio

热门文章

  1. 算法的时间复杂度和空间复杂度-总结
  2. 鸿蒙太空是什么意思,[评论]林黛玉:“眼泪还债”暗洒闲抛知为谁?
  3. 谷歌浏览器帮助用户在安装前识别不受信任的扩展
  4. 5. ATF(ARM Trusted firmware)启动---bl31
  5. 当下的力量-埃克哈特·托利
  6. Java多用户商城系统B2B2C源码-(九)服务链路追踪(Spring Cloud Sleuth)
  7. DataV阿里云可视化(地图下钻、数据获取) - 文档篇
  8. 如何在 Google 免费云端运行 Python 深度学习框架?
  9. python经纬度转换为平面坐标的算法_Python经纬度坐标转换为距离及角度的实现
  10. Maya---之viewcube的寻找