没有SPJ时显然是不需要输出方案的。不需要输出方案很好做,先把边扩展(因为会往下流),然后求最大独立集,最大独立集=n-最小点覆盖,因为其是最大独立集的补集。如何求最小点覆盖呢?毕竟我写过最大权闭合子图的:http://www.51nod.com/Challenge/Problem.html#!#problemId=1325,不过没写这篇题解。不过这里用网络流有点大材小用,直接匈牙利匹配求最长反链即可。

然后接下来两问可以这么做,第一问显然直接dfs即可。其实我的做法挺巧妙的,枚举要考虑的点,删去能到达它/它能到达的点,然后再求一次求答案。然后发现若答案是ans-1,则是正确答案。

#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,m,idx,bel[N];
bool a[N][N],has[N],vis[N],ban[N],s[N],t[N];
bool find(int u)
{
if(ban[u])return ;
for(int i=;i<=n;i++)
if(!vis[i]&&a[u][i]&&!ban[i])
{
vis[i]=;
if(!bel[i]||find(bel[i])){has[u]=,bel[i]=u;return ;}
}
return ;
}
void dfs(int u)
{
if(s[u])return;
s[u]=;
for(int i=;i<=n;i++)if(a[u][i]&&!t[i])t[i]=,dfs(bel[i]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=,x,y;i<=m;i++)scanf("%d%d",&x,&y),a[x][y]=;
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
a[i][j]=a[i][j]||a[i][k]&&a[k][j];
int ans=n;
for(int i=;i<=n;i++)
{
memset(vis,,sizeof vis);
if(find(i))ans--;
}
printf("%d\n",ans);
for(int i=;i<=n;i++)if(!has[i])dfs(i);
for(int i=;i<=n;i++)printf("%d",s[i]&&!t[i]);
puts("");
for(int k=;k<=n;k++)
{
memset(bel,,sizeof bel);
memset(has,,sizeof has);
memset(ban,,sizeof ban);
int tmp=;
for(int i=;i<=n;i++)if(a[i][k]||a[k][i]||i==k)ban[i]=;else tmp++;
for(int i=;i<=n;i++)
{
memset(vis,,sizeof vis);
if(find(i))tmp--;
}
printf("%d",tmp==ans-);
}
}

[CTSC2008]祭祀(二分图匹配)的更多相关文章

  1. Bzoj 2718: [Violet 4]毕业旅行 && Bzoj 1143: [CTSC2008]祭祀river 传递闭包,二分图匹配,匈牙利,bitset

    1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1878  Solved: 937[Submit][St ...

  2. BZOJ1143 [CTSC2008]祭祀river 二分图匹配 最小链覆盖

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1143 题意概括 给出一个有向图.求最小链覆盖. 题解 首先说两个概念: 链:一条链是一些点的集合, ...

  3. bzoj 1143: [CTSC2008]祭祀river / 2718: [Violet 4]毕业旅行 -- 二分图匹配

    1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MB Description 在遥远的东方,有一个神秘的民族,自称Y族.他们 ...

  4. BZOJ1143 [CTSC2008]祭祀river 【二分图匹配】

    1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3236  Solved: 1651 [Submit] ...

  5. [BZOJ1143][CTSC2008]祭祀river(Dilworth定理+二分图匹配)

    题意:给你一张n个点的DAG,最大化选择的点数,是点之间两两不可达. 要从Dilworth定理说起. Dilworth定理是定义在偏序集上的,也可以从图论的角度解释.偏序集中两个元素能比较大小,则在图 ...

  6. BZOJ-1143&&BZOJ-2718 祭祀river&&毕业旅行 最长反链(Floyed传递闭包+二分图匹配)

    蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...

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

    1143: [CTSC2008]祭祀river 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1143 Description: 在遥远的 ...

  8. BZOJ 1143: [CTSC2008]祭祀river 最长反链

    1143: [CTSC2008]祭祀river Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  9. 【bzoj 1143】[CTSC2008]祭祀river

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

  10. bzoj1143: [CTSC2008]祭祀river 最长反链

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

随机推荐

  1. sql ,类型转换,日期截取格式

    字符型 转换成整型 CONVERT(int ,字段) 只取年月日格式 CONVERT(varchar(10), ZB.drive_time, 120 ) SELECT CONVERT(VARCHAR, ...

  2. 苏州大学ICPC集训队新生赛第二场

    A - Score UVA - 1585 水 #include<bits/stdc++.h> using namespace std; int main(){ int n; cin> ...

  3. com.alibaba.druid.pool.DruidDataSource

    https://www.cnblogs.com/wuyun-blog/p/5679073.html DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PR ...

  4. Hbase PleaseHoldException错误

    PleaseHoldException ① 原因:(由于正在操作Hbase时,电脑突然关机,未正常关闭hbase,故导致shell无法正常显示)如下图: ②解决过程: 先在网上百度到了使用https: ...

  5. 小程序实现倒计时:解决ios倒计时失效(setInterval失效)

    在使用之前需要先在page页引入wxTimer.js文件(这里我将文件放在/utils) let timer = require('../../utils/wxTimer.js'); 然后就可以使用啦 ...

  6. 剑指offer_1.24_Day_4

    构建乘积数组 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1] ...

  7. swift 录音 AVAudioRecorder

    2018年05月16日 15:22:44 msmwncx阅读数:548 https://blog.csdn.net/msmwncx/article/details/80336973 版权声明:本文为博 ...

  8. Swift - UISplitViewController

    https://blog.csdn.net/weixin_43704791/article/details/86424080 2019年01月13日 AppDelegate中: func applic ...

  9. [题解] Luogu P4245 [模板]任意模数NTT

    三模NTT 不会... 都0202年了,还有人写三模NTT啊... 讲一个好写点的做法吧: 首先取一个阀值\(w\),然后把多项式的每个系数写成\(aw + c(c < w)\)的形式,换句话说 ...

  10. (5)opencv的基础操作和矩阵的掩模操作

    不懂的,可以简单,看看这个网址:https://blog.csdn.net/xiongwen_li/article/details/78503491 图片放到了桌面,所以,图片的路径就是桌面了,剩余的 ...