题意:给一个有向无环图,求最大的点集,x不能到y,且y不能到x。

题解:首先可以知道的是这个是偏序集最大独立集,通过Dilworth定理可以知道是要求最小链划分(最小可交路径覆盖),我们通过网络流优化,建边类似于二分图最小路径覆盖,将所有点拆分为x与x+n,源点连接x,x+n连接汇点,由于是可交路径,所以再建立x+n到x的路径使得路径可交。

AC代码:

#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
const int Ni = 200005;
const int MAX = 1<<28;
struct Edge{    int u,v,c;    int next;
}edge[2000005];
int n,m;
int edn;//边数
int p[Ni];//父亲
int d[Ni];
int sp,tp;//原点,汇点    void addedge(int u,int v,int c)
{    edge[edn].u=u; edge[edn].v=v; edge[edn].c=c;    edge[edn].next=p[u]; p[u]=edn++;    edge[edn].u=v; edge[edn].v=u; edge[edn].c=0;    edge[edn].next=p[v]; p[v]=edn++;
}
int bfs()
{    queue <int> q;    memset(d,-1,sizeof(d));    d[sp]=0;    q.push(sp);    while(!q.empty())    {    int cur=q.front();    q.pop();    for(int i=p[cur];i!=-1;i=edge[i].next)    {    int u=edge[i].v;    if(d[u]==-1 && edge[i].c>0)    {    d[u]=d[cur]+1;    q.push(u);    }    }    }    return d[tp] != -1;
}
int dfs(int a,int b)
{    int r=0;    if(a==tp)return b;    for(int i=p[a];i!=-1 && r<b;i=edge[i].next)    {    int u=edge[i].v;    if(edge[i].c>0 && d[u]==d[a]+1)    {    int x=min(edge[i].c,b-r);    x=dfs(u,x);    r+=x;    edge[i].c-=x;    edge[i^1].c+=x;    }    }    if(!r)d[a]=-2;    return r;
}    int dinic(int sp,int tp)
{    int total=0,t;    while(bfs())    {    while(t=dfs(sp,MAX))    total+=t;    }    return total;
}
int main()
{    int i,u,v,c;    int T;scanf("%d",&T);while(T--)    {    scanf("%d%d",&n,&m);edn=0;//初始化    memset(p,-1,sizeof(p));    sp=0;tp=2*n+1;    for(i=1;i<=n;i++){addedge(sp,i,1);addedge(i+n,tp,1);addedge(i+n,i,MAX);}for(i=0;i<m;i++)    {    scanf("%d%d",&u,&v);    addedge(u,v+n,MAX);}    printf("%d\n",n-dinic(sp,tp));  }    return 0;
}

牛客网 2018年长沙理工大学第十三届程序设计竞赛 K zzq的离散数学教室2[网络流]相关推荐

  1. 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 离散数学中有种名叫"哈斯图" ...

  2. 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1

    题目描述 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是一些正整数在偏序关系"整除"下的哈斯图的边数.用大白话讲,在偏序关系"整除& ...

  3. 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1(素数表)

    点击打开链接 解析: 这里其实就是每一个组合(L,R) R=L*k (k是一个质数),所以我们只要找到i*k<R的这个最大的k,k在素数表的下标就是他的答案了 这道题你遍历[L,R]区间即使用了 ...

  4. 牛客 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫

    链接:https://www.nowcoder.com/acm/contest/96/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  5. 2018年长沙理工大学第十三届程序设计竞赛题解

    链接:https://www.nowcoder.com/acm/contest/96/A 来源:牛客网 "LL是什么?这都不知道的话,别说自己是程序猿啊!"   "lon ...

  6. 2018年长沙理工大学第十三届程序设计竞赛 D-zzq的离散数学

    链接: https://www.nowcoder.com/acm/contest/96/D 来源:牛客网 题目描述 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是 ...

  7. 2018年长沙理工大学第十三届程序设计竞赛 Dzzq的离散数学教室1

    Dzzq的离散数学教室1 链接:https://www.nowcoder.com/acm/contest/96/D 来源:牛客网 zzq的离散数学教室1 时间限制:C/C++ 1秒,其他语言2秒 空间 ...

  8. 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫

    题目链接 题目描述: 给你一个n*m的图,地图上'.'代表可以走的地方,而'#'代表陷阱不能走, 'P'代表人物位置,'K'代表钥匙,'E'代表出口.人物一个,钥匙有多个, ('K'的数量<=5 ...

  9. 2018年长沙理工大学第十三届程序设计竞赛

    链接:https://www.nowcoder.com/acm/contest/96#question 持续更新ing,请多多关注~ A.LL 题目描述: "LL是什么?这都不知道的话,别说 ...

最新文章

  1. 稳定性保障,如何慢慢放量灰度
  2. Heap(堆结构/优先队列)-Swift实现
  3. 一致性哈希算法 应用场景
  4. linkedhashmap中关于LRU算法的实现
  5. redis内存知识点
  6. 图文讲解 sqlserver 2000 评测版 数据库过期 的解决方法
  7. 【RBM】代码学习--DeepLearningToolBox
  8. android 传感器使用与开发---陀螺仪传感器
  9. 构造常数函数解决抽象函数导数小题
  10. VMware Workstation虚拟机安装及虚拟机搭建(内有虚拟机安装包及序列号和系统镜像)...
  11. 任正非——《一江春水向东流》
  12. 程序员如何搭建自己的知识体系?
  13. pythonencoding etf-8_Python 量化分析ETF指数基金投资
  14. 参考线--深入了解字体
  15. 云服务器搭建nacos服务
  16. Pandas 数据分析-第八章(排序sort_index())
  17. 选择排序总结以及排序算法的稳定性
  18. 企业办理两化融合有什么优势?
  19. scilab系列---概述
  20. 【刷题记录1】算法|数据结构|C/C++

热门文章

  1. VSCode编译调试复杂C/C++项目
  2. 苹果汽车发布?这个发布会脑洞我服
  3. mac 下载navicat premium提示文件损坏的解决方案
  4. 好佳居窗帘十大品牌 窗帘怎么搭配不同的窗户?
  5. matlab中svm算法实现,svm算法matlab实现
  6. PS 处理图层弹出提示 “无法完成请求,因为智能对象不能直接进行编辑“ 解决办法
  7. flow hive 新型蜂箱_【中蜂蜂箱】flow hive 自动采蜜蜂箱 6m自流蜜蜂箱巢框 塑料巢脾...
  8. 许多学习vba excel脚本的简单例子
  9. 如何用爬虫爬图,以百度图片为例
  10. android 图片闪电效果图,Android超简单实现炫酷的图片展示效果