在遥远的东方,有一个神秘的民族,自称Y族。他们世代居住在水面上,奉龙王为神。每逢重大庆典, Y族都
会在水面上举办盛大的祭祀活动。我们可以把Y族居住地水系看成一个由岔口和河道组成的网络。每条河道连接着
两个岔口,并且水在河道内按照一个固定的方向流动。显然,水系中不会有环流(下图描述一个环流的例子)。

由于人数众多的原因,Y族的祭祀活动会在多个岔口上同时举行。出于对龙王的尊重,这些祭祀地点的选择必
须非常慎重。准确地说,Y族人认为,如果水流可以从一个祭祀点流到另外一个祭祀点,那么祭祀就会失去它神圣
的意义。族长希望在保持祭祀神圣性的基础上,选择尽可能多的祭祀的地点。
Input
第一行包含两个用空格隔开的整数N、M,分别表示岔口和河道的数目,岔口从1到N编号。
接下来M行,每行包含两个用空格隔开的整数u、v,
描述一条连接岔口u和岔口v的河道,水流方向为自u向v。
N≤100M≤1000
Output
第一行包含一个整数K,表示最多能选取的祭祀点的个数。

Sample Input
4 4

1 2

3 4

3 2

4 2
Sample Output
2

【样例说明】

在样例给出的水系中,不存在一种方法能够选择三个或者三个以上的祭祀点。包含两个祭祀点的测试点的方案有两种:

选择岔口1与岔口3(如样例输出第二行),选择岔口1与岔口4。

水流可以从任意岔口流至岔口2。如果在岔口2建立祭祀点,那么任意其他岔口都不能建立祭祀点

但是在最优的一种祭祀点的选取方案中我们可以建立两个祭祀点,所以岔口2不能建立祭祀点。对于其他岔口

至少存在一个最优方案选择该岔口为祭祀点,所以输出为1011。

其实这题是一个二分图的最大独立集问题

我们只要i,j不可以相互到达建立一个inf的边
原点到所有的i建立一条1的边
所有的j向t汇点建立一条1的边

跑一下最大流即可

#include<bits/stdc++.h>
using namespace std;
const int maxn=120000;
struct node
{int v,nxt;int w;
}edge[maxn*4];
queue<int>q;
int mapp[1000][1000];
int s,t;
int cnt=0,head[maxn];
const int inf=0x3f3f3f3f;
void add_Edge(int u,int v,int w)
{edge[cnt].v=v;edge[cnt].w=w;edge[cnt].nxt=head[u];head[u]=cnt++;
}
int dis[maxn];
int bfs()
{int x;while(!q.empty())q.pop();memset(dis,0,sizeof(dis));dis[s]=1;q.push(s);while(!q.empty()){x=q.front();q.pop();for(int i=head[x];i!=-1;i=edge[i].nxt){if(edge[i].w&&!dis[edge[i].v]){dis[edge[i].v]=dis[x]+1;if(edge[i].v==t)return 1;q.push(edge[i].v);}}}return 0;
}
int dfs(int x,int low)
{if(x==t)return low;int temp=low;int k;for(int i=head[x];i!=-1;i=edge[i].nxt){if(edge[i].w&&dis[edge[i].v]==dis[x]+1){k=dfs(edge[i].v,min(temp,edge[i].w));if(!k)dis[edge[i].v]=0;edge[i].w-=k;edge[i^1].w+=k;if(!(temp-=k))break;}}return low-temp;
}
int main ()
{int n,m;cnt=0;memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int xx,yy;scanf("%d%d",&xx,&yy);mapp[xx][yy]=1;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){mapp[i][j]|=(mapp[i][k]&mapp[k][j]);}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(mapp[i][j]){add_Edge(i,j+n,inf),add_Edge(j+n,i,0);}}}s=2*n+1;t=2*n+2;for(int i=1;i<=n;i++){add_Edge(s,i,1);add_Edge(i,s,0);}for(int i=n+1;i<=2*n;i++)add_Edge(i,t,1),add_Edge(t,i,0); int flow=0;while(bfs()){flow+= dfs(s,inf);}printf("%d\n",n-flow);
}/*
1 9
1 6
2 9
3 9
3 8
3 6
4 9
4 6*/

【bzoj1143】[CTSC2008]祭祀river Floyd+网络流最小割相关推荐

  1. bzoj1143[CTSC2008]祭祀river

    bzoj1143[CTSC2008]祭祀river 题意: Y族居住地水系是一个由岔口和河道组成的网络.每条河道连接着两个岔口,并且水在河道内按照一个固定的方向流动.水系中不会有环流.由于人数众多的原 ...

  2. [bzoj1143][CTSC2008]祭祀river——DAG上最长反链,Dilworth定理,最大二分图匹配,Floyd

    题目大意: 给定一个DAG图,求最长反链(即一个点集,其中任意点两两不可以相互到达). 思路: 一开始我其实是想用求最大独立集的方法去求的.但是并不会(好像也过不去). 题目所要求的是最长反链,需要用 ...

  3. BZOJ1143: [CTSC2008]祭祀river 网络流_Floyd_最大独立集

    Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都 会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组 ...

  4. BZOJ1143[CTSC2008]祭祀river 偏序集及Dilworth定理

    这里讲一下我对偏序集的认识   如果有偏差可以评论我  我会修改 一:定义 (度娘上copy来的  不想看的可以跳过 设R是非空集合A上的一个二元关系,若R满足: 自反性.反对称性.传递性,则称R为A ...

  5. 最长反链(bzoj 1143: [CTSC2008]祭祀river)

    题目描述: 给你一个n个点m条边的有向无环图,求出最大点集满足其中任意两点间都不能存在路径 也就是对于所有的x, y∈S,x不能到达y,y也不能到达x 对于有向无环图(DAG): 链:一些点的集合,链 ...

  6. 【bzoj2521】[Shoi2010]最小生成树 网络流最小割

    题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...

  7. bzoj1143/2718 祭祀river(最大独立集)

    [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2175  Solved: 1098 [Submit][Statu ...

  8. 【bzoj2132】圈地计划 网络流最小割

    题目描述 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土地是一块矩形的区域,可以纵横划 ...

  9. 洛谷 P1646 [国家集训队]happiness 网络流 最小割 Dinic+当前弧优化

    题目链接: https://www.luogu.com.cn/problem/P1646 参考博客: https://siyuan.blog.luogu.org/solution-p1646 算法:网 ...

最新文章

  1. 观察者模式的Java实现及应用
  2. 如何查看某一表空间内有那些表
  3. .NET MVC Filter异常处理
  4. java 多条件比较_Java 多条件复杂排序小结
  5. 用JSON.parse(JSON.stringify(itemData))序列化反序列化实现‘深度复制’
  6. 如何用二进制表示一个小数
  7. Hbase 删表过程
  8. 56py无锡官方网站2013最新
  9. Golang简单日志类
  10. Filenet 周报(12.02-12.08)
  11. 2022年NPS基准:NPS分数达到多少算好?
  12. 图片上传(调用微信接口)
  13. NVME Reset
  14. 如何展示实时音视频通话时正在说话用户的音浪
  15. LiveNVR安防摄像头Web无插件直播平台页面的快速集成方法
  16. Angelababy顺产生子,做女人当如Angelababy!
  17. 转载一些值得收藏的文章
  18. 主题医院二Android,主题医院手机版
  19. “韩国腾讯”Kakao宣布其代币KLAY将于9月底上所,下一步或登陆中国市场
  20. CodeBlocks搭建OpenCV

热门文章

  1. 香港大学计算机科学研究生,香港大学计算机科学硕士录取案例
  2. 用遗传算法求解旅行商问题
  3. 梦幻测试服务器维护要多久,梦幻西游:2.9维护没有测试服,百服平转要开放了...
  4. leetcode:2085. 统计出现过一次的公共字符串
  5. c++ primer 5th 笔记
  6. 我的Windows8体验
  7. Apache-common 包之 common-configuration 笔记
  8. action请求_可可Radio第2848期:高效“懒人”的习惯-使用邮件发送请求(2)_可可之声...
  9. emui11是鸿蒙过渡,透过EMUI11看鸿蒙OS 将延续三大原则
  10. 美国夏令时与冬令时的区别