【LOJ6197】法克(最长反链)
传送门
#include<bits/stdc++.h>
#define ll long long
#define re register
#define gc get_char
#define cs constnamespace IO{inline char get_char(){static cs int Rlen=1<<22|1;static char buf[Rlen],*p1,*p2;return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,Rlen,stdin),p1==p2)?EOF:*p1++;}template<typename T>inline T get(){char c;while(!isdigit(c=gc()));T num=c^48;while(isdigit(c=gc()))num=(num+(num<<2)<<1)+(c^48);return num;}inline int getint(){return get<int>();}
}
using namespace IO;using std::cerr;
using std::cout;cs int INF=0x7fffffff;
cs int N=1e5+5;int n,m;int S,T;
namespace NetWork{cs int N=::N<<1;struct edge{int to,cap,rev;edge(int _to,int _cap,int _rev):to(_to),cap(_cap),rev(_rev){}};std::vector<edge> G[N];typedef std::vector<edge>::iterator iter;iter cur[N];inline void addedge(int u,int v,int val){G[u].push_back(edge(v,val,G[v].size()));G[v].push_back(edge(u,0,G[u].size()-1));}int lev[N],gap[N];inline void BFS(){memset(lev,0,sizeof lev);memset(gap,0,sizeof gap);gap[1]=lev[T]=1;std::queue<int> q;q.push(T);while(!q.empty()){int u=q.front();q.pop();cur[u]=G[u].begin();for(edge &e:G[u])if(lev[e.to]==0)++gap[lev[e.to]=lev[u]+1],q.push(e.to);}}bool finished;inline int dfs(int u,int flow){if(u==T)return flow;int ans=0;for(iter &e=cur[u];e!=G[u].end();++e){if(e->cap&&lev[e->to]+1==lev[u]){int delta=dfs(e->to,std::min(flow-ans,e->cap));if(delta){e->cap-=delta;G[e->to][e->rev].cap+=delta;if((ans+=delta)==flow)return flow;}}}cur[u]=G[u].begin();if(!--gap[lev[u]++])finished=true;++gap[lev[u]];return ans;}inline int mxflow(){int ans=0;BFS();finished=false;while(!finished)ans+=dfs(S,INF);return ans;}
}signed main(){// freopen("fuck.in","r",stdin);n=getint(),m=getint();S=n<<1|1,T=S+1;for(int re i=1;i<=n;++i){NetWork::addedge(S,i,1);NetWork::addedge(i+n,T,1);NetWork::addedge(i+n,i,INF); }while(m--)NetWork::addedge(getint(),getint()+n,INF);cout<<n-NetWork::mxflow();return 0;
}
【LOJ6197】法克(最长反链)相关推荐
- 【BZOJ3997】[TJOI2015]组合数学 最长反链
[BZOJ3997][TJOI2015]组合数学 Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格 ...
- 最长反链(bzoj 1143: [CTSC2008]祭祀river)
题目描述: 给你一个n个点m条边的有向无环图,求出最大点集满足其中任意两点间都不能存在路径 也就是对于所有的x, y∈S,x不能到达y,y也不能到达x 对于有向无环图(DAG): 链:一些点的集合,链 ...
- 算法设计-递归法解最长公共子序列问题 C代码
给大家推荐一个公众号:诗葵1931 里面的诗歌很美 主要功能:递归法解最长公共子序列问题 #include<stdio.h> #include<string.h> /* 递归思 ...
- 最小路径覆盖与最小链覆盖 Dilworth定理:最小链覆盖等于最长反链(详细证明与经典例题)
一.最小路径覆盖 定义 最小路径覆盖就是指在有向无环图中,用最少的.不相交的简单路径覆盖图中的所有点. 解法 ①将原图中的每个点拆点,(将点u拆成u与u+n): ②将原图中的每条边 <u,v&g ...
- 最长反链=最小链覆盖(证明+解析)
最长反链与最小链覆盖 转自:http://vfleaking.blog.163.com/blog/static/1748076342012918105514527/ 膜拜! 大前提:在有向无环图中 链 ...
- [bzoj1143][CTSC2008]祭祀river——DAG上最长反链,Dilworth定理,最大二分图匹配,Floyd
题目大意: 给定一个DAG图,求最长反链(即一个点集,其中任意点两两不可以相互到达). 思路: 一开始我其实是想用求最大独立集的方法去求的.但是并不会(好像也过不去). 题目所要求的是最长反链,需要用 ...
- BZOJ 1143 祭祀river 最长反链
http://vfleaking.blog.163.com/blog/static/1748076342012918105514527/大前提:在有向无环图中链是一个点的集合,这个集合中任意两个元素v ...
- bzoj 1143 bzoj 2718 最长反链
题意:n个点,m条有向边,求最长反链 又到了涨姿势的时候了...(果然蒟蒻) DAG中,有如下的一些定义和性质: 链:一条链是一些点的集合,链上任意两个点x, y,满足要么 x 能到达 y ,要么 y ...
- LibreOJ #6197.法克 上下界网络流
题意 给一个有n个点m条边的DAG,问最多能选出多少个点使得选出的点两两不能到达. n≤105,m≤2nn≤105,m≤2nn\le10^5,m\le2n 分析 根据某定理,最长反链=最小链覆盖,注意 ...
- 纸飞机【最小链覆盖等于最长反链】
牛客挑战赛36 C 题目链接 题目想知道的是最长严格下降子序列的最少个数用以覆盖完N个数.也就是最小链覆盖问题了. 那么,我们反过来想,最长反链,我们求得最长不递减序列的个数,如题,"2 4 ...
最新文章
- flutter ios打包_Flutter项目之iOS应用的打包发布流程
- C#之IComparable用法,实现ListT.sort()排序
- Netweaver的端口号和Spring boot内嵌的Tomcat端口
- 推荐我看过的几本好书给大家!(2)
- [COCI 2018#5]Parametriziran
- 类模板(参考《C++ Templates 英文版第二版》)
- vba 指定列后插入列_在不同的列左侧插入指定数量的空白列
- HLA程序:HelloWorld.hla
- VUE项目中使用this.$forceUpdate()强制页面重新渲染
- Study Struts Commons Validator
- Ubuntu 12.04.2搭建nfs服务器
- Bootstrap相关优质项目推荐
- o蓝屏之死---stop:0X000000c5(0x000000c4等系列)---Mr.Zhang
- PRINCE2产品认证报考常见一些问答
- 和我一起打造个简单搜索之Logstash实时同步建立索引
- vue 刮刮乐抽奖H5项目
- 自动刷抖音脚本(解放你的双手)
- python凯撒密码实验报告_凯撒密码的python实现
- win2008R2 不能访问局域网共享\局域网共享中无本机,解决办法
- linux下(centos7)fisheye与crucible破解教程--亲测有用