bzoj1143[CTSC2008]祭祀river

题意:

Y族居住地水系是一个由岔口和河道组成的网络。每条河道连接着两个岔口,并且水在河道内按照一个固定的方向流动。水系中不会有环流。由于人数众多的原因,Y族的祭祀活动会在多个岔口上同时举行。Y族人认为,如果水流可以从一个祭祀点流到另外一个祭祀点,那么祭祀就会失去它神圣的意义。求保持祭祀神圣性的基础上祭祀的地点数目的最大值。

题解:

利用各种性质。首先,题目的模型被称为最长反链,即在有向无环图中求一个点集使其两两不可达。Dilworth定理:最长反链长度=最小链覆盖(用最少的链覆盖所有节点)(证明:http://vfleaking.blog.163.com/blog/static/1748076342012918105514527/%vfk大神然而我看不懂)。求最小链覆盖的方法:建一个二分图,如果点a、b可达,则将左边的a与右边的边相连,求最大独立集。然后又有最大独立集=点数n(指二分图的半边的点数)-二分图最大匹配。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <queue>
 5 #define INF 0x3fffffff
 6 #define inc(i,j,k) for(int i=j;i<=k;i++)
 7 using namespace std;
 8
 9 int n,m,a[200][200],s,t;
10 struct e{int t,c,n;}; e es[100000]; int ess,g[1000];
11 inline void pe(int f,int t,int c){
12     es[++ess]=(e){t,c,g[f]};g[f]=ess;es[++ess]=(e){f,0,g[t]};g[t]=ess;
13 }
14 void init(){ess=-1; memset(g,-1,sizeof(g));}
15 queue <int> q; int h[1000];
16 bool bfs(int s,int t){
17     while(! q.empty())q.pop(); memset(h,-1,sizeof(h)); h[s]=0; q.push(s);
18     while(! q.empty()){
19         int x=q.front(); q.pop();
20         for(int i=g[x];i!=-1;i=es[i].n)if(es[i].c&&h[es[i].t]==-1)h[es[i].t]=h[x]+1,q.push(es[i].t);
21     }
22     if(h[t]==-1)return 0;else return 1;
23 }
24 int dfs(int x,int t,int f){
25     if(x==t)return f; int used=0;
26     for(int i=g[x];i!=-1;i=es[i].n)if(es[i].c&&h[es[i].t]==h[x]+1){
27         int w=dfs(es[i].t,t,min(f,es[i].c));
28         es[i].c-=w; es[i^1].c+=w; used+=w; f-=w; if(f==0)return used;
29     }
30     if(used==0)h[x]=-1; return used;
31 }
32 int dinic(int s,int t){int ans=0; while(bfs(s,t))ans+=dfs(s,t,INF); return ans;};
33 int main(){
34     scanf("%d%d",&n,&m); memset(a,0,sizeof(a));
35     inc(i,1,m){int a1,b1; scanf("%d%d",&a1,&b1); a[a1][b1]=1;}
36     inc(k,1,n)inc(i,1,n)inc(j,1,n)a[i][j]|=a[i][k]&a[k][j];
37     s=0; t=n+n+1; init();
38     inc(i,1,n)pe(s,i,1),pe(i+n,t,1);
39     inc(i,1,n)inc(j,1,n)if(a[i][j])pe(i,j+n,1);
40     printf("%d",n-dinic(s,t));
41 }

20160701

转载于:https://www.cnblogs.com/YuanZiming/p/5693035.html

bzoj1143[CTSC2008]祭祀river相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. [CTSC2008]祭祀river

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

  8. bzoj 1143: [CTSC2008]祭祀river

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

  9. 1143: [CTSC2008]祭祀river

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

最新文章

  1. CVPR 2021:记一次神奇的 Rebuttal 经历
  2. 【原】十张javascript思维导图
  3. PHP封装对象名字的思路
  4. 【springboot】spring-boot-devtools 热部署 导致 mvn spring-boot:run 出现异常
  5. java 静态方法同步_Java – 同步静态方法
  6. [转载]常用内部排序算法--用VB6实现
  7. 使用layui 做后台管理界面,在Tab中的链接点击后添加一个新TAB的解决方法
  8. SpringBoot Logback配置,SpringBoot日志配置
  9. mount、umount 挂载卸载命令
  10. for linux shell 菜鸟_Linux 命令大全 | 菜鸟教程
  11. 我在知乎上关于Laser200/310电脑的文章。
  12. 钢铁侠java_现代版“钢铁侠”,无所不能的程序员,java工程师实现人造器官!...
  13. Elasticsearch生命周期ILM若干时间后自动删除索引index
  14. 【转载】如何从win8/8.1中文版(核心版)升级到win8/8.1专业版
  15. GPS坐标显示在百度地图上(Qt+百度地图)
  16. 记一次iphone更换电池难以取下旧电池解决办法
  17. 经济筑底要看房市“脸色”
  18. python将数字转换为中文_Python:将数字转换为文字
  19. 为此计算机所有用户安装此项,windows已经阻止此软件因为无法验证发行者,教您提示win已阻止此软件因为无法验...
  20. 瞪羚企业申报流程材料

热门文章

  1. 用手机作为显示屏打造树莓派的移动电脑形态
  2. ZOJ-3802:Easy 2048 Again(2048游戏 状态压缩dp)
  3. 身份证号码前六位备份
  4. 处理python问题之append
  5. windows远程桌面mstsc退出全屏
  6. 课后作业5:进程的同步与互斥
  7. 微软剑桥研究院院长Christopher Bishop:机器学习的基础是什么?
  8. 不要在我寂寞的时候说爱我
  9. Edraw soft
  10. 对微软CRM日期保存格式的分析