BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )

时间:2022-09-01 16:32:07

BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )

一不小心速度就成了#1....

这道题显然是求最长反链, 最长反链=最小链覆盖.最小链覆盖就是先做一次floyd传递闭包, 再求最小路径覆盖. 最小路径覆盖=N - 二分图最大匹配. 所以把所有点拆成x,y两个, 然后存在edge(u,v)就连ux->vy. 然后跑匈牙利即可.

------------------------------------------------------------------

#include<bits/stdc++.h>
 
using namespace std;
 
const int maxn = 209;
 
inline int read() {
char c = getchar();
int ret = 0;
for(; !isdigit(c); c = getchar());
for(; isdigit(c); c = getchar()) ret = ret * 10 + c - '0';
return ret;
}
 
struct edge {
int to;
edge* next;
} E[maxn * maxn], *pt = E, *head[maxn];
 
inline void addedge(int u, int v) {
pt->to = v; pt->next = head[u]; head[u] = pt++;
}
 
bitset<maxn> d[maxn];
int vis[maxn], match[maxn], N, C;
 
bool dfs(int x) {
for(edge* e = head[x]; e; e = e->next) if(vis[e->to] != C) {
vis[e->to] = C;
if(!~match[e->to] || dfs(match[e->to])) {
match[e->to] = x;
return true;
}
}
return false;
}
 
int main() {
memset(match, -1, sizeof match);
memset(vis, -1, sizeof vis);
N = read();
int m = read();
for(int i = 0; i < N; i++) d[i].reset();
while(m--) d[read() - 1][read() - 1] = 1;
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
if(d[j][i]) d[j] |= d[i];
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
if(d[i][j]) addedge(i, j);
int ans = N;
for(C = 0; C < N; C++) if(dfs(C)) ans--;
printf("%d\n", ans);
return 0;
}

------------------------------------------------------------------

2718: [Violet 4]毕业旅行

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 317  Solved: 178
[Submit][Status][Discuss]

Description

BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )

Input

BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )

Output

最多可选多少景点

Sample Input

7 6
1 2
2 3
5 4
4 3
3 6
6 7

Sample Output

2

HINT

BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )

Source

BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )的更多相关文章

  1. Bzoj 2718&colon; &lbrack;Violet 4&rsqb;毕业旅行 &amp&semi;&amp&semi; Bzoj 1143&colon; &lbrack;CTSC2008&rsqb;祭祀river 传递闭包&comma;二分图匹配&comma;匈牙利&comma;bitset

    1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1878  Solved: 937[Submit][St ...

  2. 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 ...

  3. 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族.他们 ...

  4. &lbrack;Violet 4&rsqb; 毕业旅行

    2718: [Violet 4]毕业旅行 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 672  Solved: 389[Submit][Status ...

  5. BZOJ2718&colon; &lbrack;Violet 4&rsqb;毕业旅行

    2718: [Violet 4]毕业旅行 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 229  Solved: 126[Submit][Status ...

  6. bzoj1143&colon; &lbrack;CTSC2008&rsqb;祭祀river &amp&semi;&amp&semi; bzoj27182718&colon; &lbrack;Violet 4&rsqb;毕业旅行

    其实我至今不懂为啥强联通缩点判入度会错... 然后这个求的和之前那道组合数学一样,就是最长反链=最小链覆盖=最大独立集. #include<cstdio> #include<iost ...

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

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

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

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

  9. 二分&plus;最短路判定 BZOJ 2709&colon; &lbrack;Violet 1&rsqb;迷宫花园

    BZOJ 2709: [Violet 1]迷宫花园 Sample Input 5 ######### # # # # # # # #S# # ##### # # ## # # # ### ### ## ...

随机推荐

  1. 阿里云OneinStack数据库相关

    阿里云OneinStack数据库相关必须进入oneinstack目录下执行相关命令 ===================================源码安装目录: Nginx:/usr/loca ...

  2. Nginx 下配置SSL证书的方法

    1.Nginx 配置 ssl 模块 默认 Nginx 是没有 ssl 模块的,而我的 VPS 默认装的是 Nginx 0.7.63 ,顺带把 Nginx 升级到 0.7.64 并且 配置 ssl 模块 ...

  3. c&num;实现数据的左补右补功能

    /// <summary>        /// 左補右補功能        /// </summary>        /// <param name="st ...

  4. 使用 gradle 编译多版本 android 应用

    最近要做一个 android 产品的变种版本,需要编出不同版本,每个版本有不同的包名.图标等等,和一些特有的逻辑. 很久之前做过类似的工作,当时没有 gradle, 用的方法是把公共代码抽成一个 li ...

  5. oracle&lowbar;partition sample&lowbar;simple

    一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: create table graderecord ( sno varchar2(10), sname varchar2(20), ...

  6. C动态内存分配(C与指针实例)

    主要初步介绍malloc.free.calloc.realloc的基本.日后会有更详细的内容. malloc.free分别用于动态内存分配和释放. malloc会从内存池里提取一块合适的内存(连续的) ...

  7. YiShop&lowbar;商城网站建设应该注意什么

    现在电子商务迅速发展,而专门搭建商城网站的第三方开发商也很多.现在搭建一个商城网站容易,如何运营一个商城网站才是重点.下面就由YiShop说说电子商城网站建设要思考什么呢(1)建设网站的目的是什么首先 ...

  8. Java面试准备之探究源码

    摘要:之前虽然对集合框架一些知识点作了总结,但是想想面试可能会问源码,于是又大致研究了一下集合框架的一些实现类的源码,在此整理一下. 一.集合框架 二.深究实现类 1.ArrayList源码实现 Ar ...

  9. 二、core abp 数据库迁移

    一.数据库迁移-ABP(库) 1.配置链接数据库:  贴以下代码: { "ConnectionStrings": { "Default": "Serv ...

  10. Android学习之AndroidStudio新建工程报Open File报错处理

    在AndroidStudio中新建一个工程,报如下错误: 错误处理: 1.找到build.grandle(Module:app) 2.打开build.gradle(Module:app)文件如下图所示 ...