Bzoj 2718: [Violet 4]毕业旅行 && Bzoj 1143: [CTSC2008]祭祀river 传递闭包,二分图匹配,匈牙利,bitset

时间:2022-09-25 17:18:06

1143: [CTSC2008]祭祀river

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1878  Solved: 937
[Submit][Status][Discuss]

Description

在遥远的东方,有一个神秘的民族,自称Y族。他们世代居住在水面上,奉龙王为神。每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动。我们可以把Y族居住地水系看成一个由岔口和河道组成的网络。每条河道连接着两个岔口,并且水在河道内按照一个固定的方向流动。显然,水系中不会有环流(下图描述一个环流的例子)。

Bzoj 2718: [Violet 4]毕业旅行 && Bzoj 1143: [CTSC2008]祭祀river  传递闭包,二分图匹配,匈牙利,bitset

由于人数众多的原因,Y族的祭祀活动会在多个岔口上同时举行。出于对龙王的尊重,这些祭祀地点的选择必须非常慎重。准确地说,Y族人认为,如果水流可以从一个祭祀点流到另外一个祭祀点,那么祭祀就会失去它神圣的意义。族长希望在保持祭祀神圣性的基础上,选择尽可能多的祭祀的地点。

Input

第一行包含两个用空格隔开的整数N、M,分别表示岔口和河道的数目,岔口从1到N编号。接下来M行,每行包含两个用空格隔开的整数u、v,描述一条连接岔口u和岔口v的河道,水流方向为自u向v。

Output

第一行包含一个整数K,表示最多能选取的祭祀点的个数。

Sample Input

4 4
1 2
3 4
3 2
4 2

Sample Output

2

【样例说明】
在样例给出的水系中,不存在一种方法能够选择三个或者三个以上的祭祀点。包含两个祭祀点的测试点的方案有两种:
选择岔口1与岔口3(如样例输出第二行),选择岔口1与岔口4。
水流可以从任意岔口流至岔口2。如果在岔口2建立祭祀点,那么任意其他岔口都不能建立祭祀点
但是在最优的一种祭祀点的选取方案中我们可以建立两个祭祀点,所以岔口2不能建立祭祀点。对于其他岔口
至少存在一个最优方案选择该岔口为祭祀点,所以输出为1011。

HINT

对于每个测试点:如果你仅输出了正确的被选取的祭祀点个数,那么你将得到该测试点30%的分数;如果你仅输出了正确的被选取的祭祀点个数与一个可行的方案,那么你将得到该测试点60%的分数;如果你的输出完全正确,那么你将得到该测试点100%的分数

【数据规模】 N ≤ 100 M ≤ 1 000

Source

 题解:
这道题转化一下,就成了我们要找最大独立集。
最大独立集=二分图点数-最小点覆盖=最长反链长度=最小链覆盖(路径不能相交)
链为一些点的集合,链上任意两点x,y, 要么x能到达y,要么y能到达x。
反链为一些点的集合,链上任意两点x,y, x不能到达y且y不能到达x。
然后我们就跑个传递闭包,把x能到达y的处理出来。
然后重新构图,将x能到达y的连起来。跑个最大匹配,再用总点数减去最大匹配数即可。。。
Dinic和匈牙利 都可以过。。。
我写的是匈牙利:
 #include<bits/stdc++.h>
using namespace std;
bitset<> a[];
bitset<> vis;
int bf[],n,f[][];
int read()
{
int s=,fh=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')fh=-;ch=getchar();}
while(ch>=''&&ch<=''){s=s*+(ch-'');ch=getchar();}
return s*fh;
}
int xyl(int u)
{
int v;
for(v=;v<=n;v++)
{
if(a[u][v]!=&&vis[v]==)
{
vis[v]=;
if(xyl(bf[v])==||bf[v]==)
{
bf[v]=u;
return ;
}
}
}
return ;
}
int main()
{
int m,i,j,x,y,ans;
n=read();m=read();
//for(i=1;i<=n;i++)a[i][i]=1;
for(i=;i<=m;i++)
{
x=read();y=read();
a[x][y]=;
}
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
if(a[j][i])a[j]|=a[i];
}
}
/*for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]&&i!=j)f[i][j]=1;
}
}*/
memset(bf,,sizeof(bf));
ans=;
for(i=;i<=n;i++)
{
vis.reset();
ans+=xyl(i);
}
printf("%d",n-ans);
fclose(stdin);
fclose(stdout);
return ;
}

Bzoj 2718: [Violet 4]毕业旅行 && Bzoj 1143: [CTSC2008]祭祀river 传递闭包,二分图匹配,匈牙利,bitset的更多相关文章

  1. BZOJ 1143 &lbrack;CTSC2008&rsqb;祭祀river(二分图匹配)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1143 [题目大意] 给出一张有向图,问最大不连通点集,连通具有传递性 [题解] 我们将 ...

  2. BZOJ 2718&colon; &lbrack;Violet 4&rsqb;毕业旅行&lpar; 最长反链 &rpar;

    一不小心速度就成了#1.... 这道题显然是求最长反链, 最长反链=最小链覆盖.最小链覆盖就是先做一次floyd传递闭包, 再求最小路径覆盖. 最小路径覆盖=N - 二分图最大匹配. 所以把所有点拆成 ...

  3. BZOJ-1143&amp&semi;&amp&semi;BZOJ-2718 祭祀river&amp&semi;&amp&semi;毕业旅行 最长反链(Floyed传递闭包&plus;二分图匹配)

    蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...

  4. BZOJ 1143&colon; &lbrack;CTSC2008&rsqb;祭祀river(二分图最大点独立集)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1143 题意: 思路: 二分图最大点独立集,首先用floyd判断一下可达情况. #include&lt ...

  5. bzoj 1143&colon; &lbrack;CTSC2008&rsqb;祭祀river &sol; 2718&colon; &lbrack;Violet 4&rsqb;毕业旅行 -- 二分图匹配

    1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MB Description 在遥远的东方,有一个神秘的民族,自称Y族.他们 ...

  6. BZOJ 1143 1143&colon; &lbrack;CTSC2008&rsqb;祭祀river 最长反链

    1143: [CTSC2008]祭祀river Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动. ...

  7. BZOJ 1143&colon; &lbrack;CTSC2008&rsqb;祭祀river 最长反链

    1143: [CTSC2008]祭祀river Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  8. 1143&colon; &lbrack;CTSC2008&rsqb;祭祀river(最长反链)

    1143: [CTSC2008]祭祀river 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1143 Description: 在遥远的 ...

  9. &lbrack;BZOJ 1143&rsqb; &lbrack;CTSC2008&rsqb; 祭祀river 【最长反链】

    题目链接:BZOJ - 1143 题目分析 这道题在BZOJ上只要求输出可选的最多的祭祀地点个数,是一道求最长反链长度的裸题. 下面给出一些相关知识: 在有向无环图中,有如下的一些定义和性质: 链:一 ...

随机推荐

  1. DNS查找域名的过程

    当我们在浏览器输入一个url地址时,需要获取到这个url的域名,本篇文章主要介绍了关于DNS查找解析域名的过程的一些东西. 关于DNS 不清楚DNS的小伙伴可以点这里:关于域名系统DNS解析IP地址的 ...

  2. TotalCommander 之 快捷键

    显示编辑文件: F3:专门用来查看文件,这个恐怕是使用程度最高的快捷键了.当然并不是所有的文件都能打开,如需要查看更多类型的文件,还需要安装插件.或者直接双击用系统自带的软件查看也可.Ctrl + Q ...

  3. 4分钟了解nano编辑器和简单命令 2015&period;10&period;6

    nano感觉并不常用,但是偶尔遇到过几次. nano命令是一个类似VI的编辑器,但是更简单,其中的i,a等命令似乎可以用,但是有些命令不可以用.保存和退出最大的区别在于退出方式,如果你要保存所做的修改 ...

  4. BZOJ 1406 密码箱

    直接两层枚举就行了. 避免排序可以用set. #include<iostream> #include<cstdio> #include<cstring> #incl ...

  5. CI 框架增加公用函数-如何使用Helper辅助函数

    在CI框架增加一个公用的函数,或者说是要在页面上调用一个函数,可以写一个帮助类如:menu_helper.php.类名必有_helper后缀名,这标识为帮助类.文件要放在application/hel ...

  6. maven入门(10)maven的仓库

    [0]README 1)本文部分文字转自 "maven实战",旨在 review  "maven(6)仓库" 的相关知识:   [1]何为 Maven仓库 1) ...

  7. C&num; &period;net 中 Timeout 的处理及遇到的问题

    C# 中 Timeout 的处理 前言 最近在项目中要实现一个功能,是关于 Timeout 的,主要是要在要在 TCP 连接建立的时间 和 整个请求完成的时间,在这两个时间层面上,如果超出了设置的时间 ...

  8. 使用mybatis-generator工具自动生成mybatis代码

    使用mybatis-generator工具自动生成mybatis代码 步骤如下: 1.引入maven  依赖,在项目pom.xml文件中添加 <plugin> <groupId&gt ...

  9. 「BZOJ1251」序列终结者 (splay 区间操作&rpar;

    题面: 1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5367  Solved: 2323[Submit][Status][D ...

  10. log4j2发送消息至Kafka

    title: 自定义log4j2发送日志到Kafka tags: log4j2,kafka 为了给公司的大数据平台提供各项目组的日志,而又使各项目组在改动上无感知.做了一番调研后才发现log4j2默认 ...