牛客网 2018年长沙理工大学第十三届程序设计竞赛 K zzq的离散数学教室2[网络流]
题意:给一个有向无环图,求最大的点集,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[网络流]相关推荐
- 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 离散数学中有种名叫"哈斯图" ...
- 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1
题目描述 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是一些正整数在偏序关系"整除"下的哈斯图的边数.用大白话讲,在偏序关系"整除& ...
- 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1(素数表)
点击打开链接 解析: 这里其实就是每一个组合(L,R) R=L*k (k是一个质数),所以我们只要找到i*k<R的这个最大的k,k在素数表的下标就是他的答案了 这道题你遍历[L,R]区间即使用了 ...
- 牛客 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫
链接:https://www.nowcoder.com/acm/contest/96/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 2018年长沙理工大学第十三届程序设计竞赛题解
链接:https://www.nowcoder.com/acm/contest/96/A 来源:牛客网 "LL是什么?这都不知道的话,别说自己是程序猿啊!" "lon ...
- 2018年长沙理工大学第十三届程序设计竞赛 D-zzq的离散数学
链接: https://www.nowcoder.com/acm/contest/96/D 来源:牛客网 题目描述 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是 ...
- 2018年长沙理工大学第十三届程序设计竞赛 Dzzq的离散数学教室1
Dzzq的离散数学教室1 链接:https://www.nowcoder.com/acm/contest/96/D 来源:牛客网 zzq的离散数学教室1 时间限制:C/C++ 1秒,其他语言2秒 空间 ...
- 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫
题目链接 题目描述: 给你一个n*m的图,地图上'.'代表可以走的地方,而'#'代表陷阱不能走, 'P'代表人物位置,'K'代表钥匙,'E'代表出口.人物一个,钥匙有多个, ('K'的数量<=5 ...
- 2018年长沙理工大学第十三届程序设计竞赛
链接:https://www.nowcoder.com/acm/contest/96#question 持续更新ing,请多多关注~ A.LL 题目描述: "LL是什么?这都不知道的话,别说 ...
最新文章
- 稳定性保障,如何慢慢放量灰度
- Heap(堆结构/优先队列)-Swift实现
- 一致性哈希算法 应用场景
- linkedhashmap中关于LRU算法的实现
- redis内存知识点
- 图文讲解 sqlserver 2000 评测版 数据库过期 的解决方法
- 【RBM】代码学习--DeepLearningToolBox
- android 传感器使用与开发---陀螺仪传感器
- 构造常数函数解决抽象函数导数小题
- VMware Workstation虚拟机安装及虚拟机搭建(内有虚拟机安装包及序列号和系统镜像)...
- 任正非——《一江春水向东流》
- 程序员如何搭建自己的知识体系?
- pythonencoding etf-8_Python 量化分析ETF指数基金投资
- 参考线--深入了解字体
- 云服务器搭建nacos服务
- Pandas 数据分析-第八章(排序sort_index())
- 选择排序总结以及排序算法的稳定性
- 企业办理两化融合有什么优势?
- scilab系列---概述
- 【刷题记录1】算法|数据结构|C/C++
热门文章
- VSCode编译调试复杂C/C++项目
- 苹果汽车发布?这个发布会脑洞我服
- mac 下载navicat premium提示文件损坏的解决方案
- 好佳居窗帘十大品牌 窗帘怎么搭配不同的窗户?
- matlab中svm算法实现,svm算法matlab实现
- PS 处理图层弹出提示 “无法完成请求,因为智能对象不能直接进行编辑“ 解决办法
- flow hive 新型蜂箱_【中蜂蜂箱】flow hive 自动采蜜蜂箱 6m自流蜜蜂箱巢框 塑料巢脾...
- 许多学习vba excel脚本的简单例子
- 如何用爬虫爬图,以百度图片为例
- android 图片闪电效果图,Android超简单实现炫酷的图片展示效果