博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ】1143: [CTSC2008]祭祀river
阅读量:6339 次
发布时间:2019-06-22

本文共 2021 字,大约阅读时间需要 6 分钟。

【题意】求DAG上最多的点使得互不可达。

【算法】floyd+最大匹配

【题解】

链是DAG上的一个点集,集合内的点相互单向可达。

反链是DAG上的一个点集,集合内的点相互不可达。

题目显然是求最长反链,转化为最小链覆盖。

最小链覆盖只要求可达,最小路径覆盖却要求相连。

所以floyd传递闭包(用floyd解决01可达信息称为传递闭包),然后最小路径覆盖ans=n-最大匹配。

二分图记得开双倍点。

#include
#include
#include
#include
using namespace std;const int maxn=210,inf=0x3f3f3f3f;bool map[maxn][maxn];int tot=1,n,m,first[maxn],S,T,d[maxn],cur[maxn];//最小路径覆盖要开两倍点! struct edge{
int v,flow,from;}e[maxn*maxn*3];void floyd(){ for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) map[i][j]=map[i][j]||(map[i][k]&map[k][j]);}void insert(int u,int v,int w){tot++;e[tot].v=v;e[tot].flow=w;e[tot].from=first[u];first[u]=tot; tot++;e[tot].v=u;e[tot].flow=0;e[tot].from=first[v];first[v]=tot;}queue
q;bool bfs(){ q.push(S); memset(d,-1,sizeof(d)); d[S]=0; while(!q.empty()){ int x=q.front();q.pop(); for(int i=first[x];i;i=e[i].from) if(e[i].flow&&d[e[i].v]==-1){ d[e[i].v]=d[x]+1; q.push(e[i].v); } } return d[T]!=-1;}int dinic(int x,int a){ if(x==T||a==0)return a; int f,flow=0; for(int& i=cur[x];i;i=e[i].from) if(d[e[i].v]==d[x]+1&&e[i].flow&&(f=dinic(e[i].v,min(a,e[i].flow)))>0){ e[i].flow-=f; e[i^1].flow+=f; flow+=f; a-=f; if(a==0)break;//... } return flow;} int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int u,v; scanf("%d%d",&u,&v); map[u][v]=1; } for(int i=1;i<=n;i++)map[i][i]=0; floyd(); S=0;T=2*n+1; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(map[i][j])insert(i,j+n,1); for(int i=1;i<=n;i++){insert(S,i,1);insert(i+n,T,1);} int ans=n; while(bfs()){ for(int i=S;i<=T;i++)cur[i]=first[i]; ans-=dinic(S,inf); } printf("%d",ans); return 0;}
View Code

 

转载于:https://www.cnblogs.com/onioncyc/p/7351220.html

你可能感兴趣的文章
理解并取证:IPv6与IPv4在报文结构上的区别
查看>>
EOS主网上线只是开始,如何运营决定未来
查看>>
不用Visual Studio,5分钟轻松实现一张报表
查看>>
(译)如何使用cocos2d和box2d来制作一个Breakout游戏:第一部分
查看>>
计算机图形学(一) 图形系统综述
查看>>
持续集成(CI)- 几种测试的区别(摘录)
查看>>
多用户虚拟Web3D环境Deep MatrixIP9 1.04发布
查看>>
求高手,求解释
查看>>
[MSSQL]NTILE另类分页有么有?!
查看>>
winform datagridview 通过弹出小窗口来隐藏列 和冻结窗口
查看>>
Jquery闪烁提示特效
查看>>
最佳6款用于移动网站开发的 jQuery 图片滑块插件
查看>>
C++ String
查看>>
获取系统托盘图标的坐标及文本
查看>>
log4j Test
查看>>
HDU 1255 覆盖的面积(矩形面积交)
查看>>
SQL数据库无法附加,提示 MDF" 已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。...
查看>>
第二十一章流 3用cin输入
查看>>
在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。...
查看>>
获取SQL数据库中的数据库名、所有表名、所有字段名、列描述
查看>>