Description

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

由于人数众多的原因,Y族的祭祀活动会在多个岔口上同时举行。出于对龙王的尊重,这些祭祀地点的选择必
须非常慎重。准确地说,Y族人认为,如果水流可以从一个祭祀点流到另外一个祭祀点,那么祭祀就会失去它神圣
的意义。族长希望在保持祭祀神圣性的基础上,选择尽可能多的祭祀的地点。

Input

第一行包含两个用空格隔开的整数N、M,分别表示岔口和河道的数目,岔口从1到N编号。接下来M行,每行包
含两个用空格隔开的整数u、v,描述一条连接岔口u和岔口v的河道,水流方向为自u向v。 N ≤ 100 M ≤ 1 000

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。

似乎少了一问方案数统计啊。。

这题是一个可重的最小路径覆盖问题,我们用floyd预处理出各个点之间的联通性,然后直接跑匈牙利算法即可

#include<cstdio>
#include<cstdio>
#include<cstring>
using namespace std;
struct map
{int s,t;int next;
}a[1000001];
int head[100001];
int edge;
bool v[100001];
int lk[100001];
int ans;
int n;
inline void add(int s,int t)
{a[edge].next=head[s];head[s]=edge;a[edge].s=s;a[edge].t=t;
}
inline bool find(int d)
{int i;for(i=head[d];i!=0;i=a[i].next){int t=a[i].t;if(!v[t]){v[t]=true;if(lk[t]==0||find(lk[t])){lk[t]=d;return true;}}}return false;
}
inline int work()
{int i;for(i=1;i<=n;i++){memset(v,0,sizeof(v));if(find(i))ans++;}return ans;
}
int mp[101][101];
int main()
{int m;scanf("%d%d",&n,&m);int i,j,k,s,t;for(i=1;i<=m;i++){scanf("%d%d",&s,&t);mp[s][t]=1;}for(k=1;k<=n;k++){for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(mp[i][k]==1&&mp[k][j]==1)mp[i][j]=1;}}}for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(mp[i][j]){edge++;add(i,j+n);}}}printf("%d\n",n-work());return 0;
}

bzoj 1143: [CTSC2008]祭祀river相关推荐

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

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

  2. 1143: [CTSC2008]祭祀river

    Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4018  Solved: 2048 [Submit][Status][Discuss] Descri ...

  3. BZOJ.1143.[CTSC2008]祭祀(Dilworth定理 最大流ISAP)

    题目链接 题目是求最长反链,反链指点集内任意两点不能互相到达. 根据Dilworth定理,在DAG中,\[最长反链 = 最小路径覆盖 = V - 最大匹配数\] 用Floyd求一遍传递闭包后,在所有可 ...

  4. bzoj1143[CTSC2008]祭祀river

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

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

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

  6. [CTSC2008]祭祀river

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

  7. 【bzoj1143】[CTSC2008]祭祀river Floyd+网络流最小割

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

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

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

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

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

最新文章

  1. 全卷积神经网路【U-net项目实战】肺结节分割案例分析:DSB3Tutorial
  2. 合理持仓 静待市场方向选择
  3. C#中方法的参数四种类型(值参数、ref、out、params)详解
  4. LayoutInflater中调用系统服务
  5. 促进新一代人工智能产业发展三年行动计划_浙江提出冷链物流创新发展三年行动计划 力争带动产业投资约1000亿元...
  6. mongodb shell基础命令
  7. ASP.NET MVC ActionFilter自定义过滤器异常过滤器过滤器用法
  8. python新手入门总结_初学python的操作难点总结(新手必看篇)
  9. 为EF DbContext生成的实体添加注释(T5模板应用)[转]
  10. Solve one floodlight install problem
  11. java中prepend的用法_jQuery中prepend()方法用法实例
  12. 如何画分子结构的立体图
  13. 效果图色彩与色彩搭配原理
  14. 最受程序员欢迎的深度学习框架出新版啦(文末留言赠书)
  15. 直击|咪蒙、才华有限青年注销 旗下公众号清空或停更
  16. 微信小程序期末大作业 记单词小程序 适合初学者学习使用
  17. flash 的鼠标事件详解
  18. 浮躁的社会浮躁的自己
  19. Appium基础 — Appium Inspector定位工具(一)
  20. s5p4418的uboot开通网络支持

热门文章

  1. matlab水果图片,基于MATLAB的水果识别的数字图像处理教程.docx
  2. 如何判断投影坐标是 3 度带还是 6 度带?如何计算中央子午线经度?
  3. vpc自建服务器,虚拟私有云VPC搭建IPv6网络教程
  4. Angular-------持续学习(angular8.0)
  5. 光的粒子说(光电效应/康普顿效应)
  6. 燕山大学大学物理上册复习资料
  7. 媒体报道的要害在于“真假”而不是“善恶”
  8. android人脸解锁亮屏,EMUI 8.0升级加入全新人脸解锁 抬腕亮屏功能:快来看看如何开启...
  9. 冬令时 java_java处理 夏令时、冬令时问题
  10. 一个简单的连续变焦红外镜头的从零开始的设计过程(zemax)(一)