P4298 [CTSC2008]祭祀
传递闭包跑一遍按联通建图
$(1)$最长反链长度=最小链覆盖=n-最大匹配
$(2)$定义作为最大匹配出现在左端点的集合为$S$,作为最大匹配出现在右端点的集合为$T$
定义函数$ft(x)$为$S$中任意点在$T$中的对应点,定义函数$fs(s)$为$T$中任意点在$S$中的对应点
先找最大匹配,从$S$的补集出发增广,当然这里增广不是真正意义上的增广,只是遍历并标记经过的点而已
左边没有标记过的或右边标记过的就是最小点覆盖,也就是最大独立集的补集
$(3)$枚举点,每次删掉在跑匹配就行
My complete code:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct node{
int to,next;
}edge[11000];
int n,m,ans,link,num,cnt,idx,ci; int dis[210][210],head[210],mat[210],to[210],s[210],t[210],visit[210];
bool del[210];
inline void add(int u,int v){
edge[++cnt]=(node){v,head[u]}; head[u]=cnt;
}
bool dfs(int u){
if(del[u])
return false;
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to;
if(visit[v]!=idx&&!del[v]){
visit[v]=idx;
if(!mat[v]){
to[u]=v;
mat[v]=u;
return true;
}else if(dfs(mat[v])){
to[u]=v;
mat[v]=u;
return true;
}
}
}
return false;
}
void cal(int u){
if(s[u])
return;
s[u]=1;
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to;
if(t[v])
continue;
t[v]=1;
cal(mat[v]);
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
int u,v;
scanf("%d%d",&u,&v);
dis[u][v]=1;
}
for(int k=1;k<=n;++k)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
dis[i][j]|=(dis[i][k]&dis[k][j]);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(dis[i][j])
add(i,j);
ans=n;
idx=0;
memset(del,false,sizeof(del));
for(int i=1;i<=n;++i){
++idx;
if(dfs(i))
ans--;
}
printf("%d\n",ans);
for(int i=1;i<=n;++i)
if(!to[i])
cal(i);
for(int i=1;i<=n;++i)
printf("%d",!t[i]&&s[i]);puts("");
for(int i=1;i<=n;++i){
memset(del,false,sizeof(del));
memset(mat,0,sizeof(mat));
memset(visit,0,sizeof(visit));
int nn=0;
for(int j=1;j<=n;++j)
if(dis[i][j] || j==i || dis[j][i])
del[j]=true;
else
nn++;
idx=0;
for(int j=1;j<=n;++j)
if(!del[j]){
++idx;
if(dfs(j))
nn--;
}
if(nn==ans-1)
printf("1");
else
printf("0");
}
return 0;
}
P4298 [CTSC2008]祭祀的更多相关文章
- BZOJ 1143 1143: [CTSC2008]祭祀river 最长反链
1143: [CTSC2008]祭祀river Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动. ...
- BZOJ 1143: [CTSC2008]祭祀river 最长反链
1143: [CTSC2008]祭祀river Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- 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 ...
- bzoj 1143: [CTSC2008]祭祀river / 2718: [Violet 4]毕业旅行 -- 二分图匹配
1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Description 在遥远的东方,有一个神秘的民族,自称Y族.他们 ...
- 1143: [CTSC2008]祭祀river(最长反链)
1143: [CTSC2008]祭祀river 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1143 Description: 在遥远的 ...
- BZOJ1143 [CTSC2008]祭祀river 【二分图匹配】
1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3236 Solved: 1651 [Submit] ...
- bzoj1143(2718)[CTSC2008]祭祀river(最长反链)
1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2781 Solved: 1420[Submit][S ...
- 洛谷 P4298: bzoj 1143: [CTSC2008]祭祀
题目传送门:洛谷 P4298. 题意简述: 给定一个 \(n\) 个点,\(m\) 条边的简单有向无环图(DAG),求出它的最长反链,并构造方案. 最长反链:一张有向无环图的最长反链为一个集合 \(S ...
- [BZOJ 1143] [CTSC2008] 祭祀river 【最长反链】
题目链接:BZOJ - 1143 题目分析 这道题在BZOJ上只要求输出可选的最多的祭祀地点个数,是一道求最长反链长度的裸题. 下面给出一些相关知识: 在有向无环图中,有如下的一些定义和性质: 链:一 ...
随机推荐
- OpenCV3.1使用SIFT
待完善... Opencv3.1.0+opencv_contrib配置及使用SIFT测试
- 利用js实现table增加一行
简单的方法: 用jquery插件,比如设置该table的id为mytable <table id="mytable"> <tr> <td> 第一 ...
- PGM图片格式与代码
这两天在搞神经网络,里面的一个人脸数据库的图片格式是PGM,事实上之前早就知道了这个图片格式,可是没去深究这个图片格式的数据究竟是什么安排的.搜索了下百度百科,发现介绍的真是简单,以下就自己来系统地整 ...
- JAVA Eclipse开发Android如何让屏幕保持为竖直或水平状态
在Manifest.xml文件中找到activity部分,添加下面这一行 android:screenOrientation="landscape" landscape是横向,po ...
- HDU 4927 大数
题意非常easy: 对于长度为n的数.做n-1遍.生成的新数列: b1=a2-a1 b2=a3-a2 b3=a4-a3 c1=b2-b1 c2=b3-b2 ans=c2-c1 最后推出公式: ...
- Android Canvas之Path操作
接上篇,Android自己定义View工具:Paint&Canvas(二) 上一篇中介绍的Canvas绘制图形仅仅能画一些常规图形(圆.椭圆.矩形等),假设想绘制更复杂的图形.Path神器来了 ...
- 编程算法 - 两个链表的第一个公共结点 代码(C)
两个链表的第一个公共结点 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入两个链表, 找出它们的第一个公共结点. 计算链表的长度, 然后移动 ...
- caffe-ubuntu1604-gtx850m-i7-4710hq----VGG_ILSVRC_16_layers.caffemodel
c++调用vgg16: ./build/install/bin/classification \ /media/whale/wsWin10/wsCaffe/model-zoo/VGG16//deplo ...
- Urho3D 在Win10下编辑器崩溃的解决方案
本解决方案来自于 https://github.com/urho3d/Urho3D/issues/2417 描述 在Win10中通过CMake启用URHO_ANGELSCRIPT选项的前提下生成Urh ...
- Anaconda2
Anaconda 是一个打包的python,一次把好多需要的包都安装好了.对于Python2.7把PyQt5都弄好了,不需要自己来编译! 看看这个 http://conda.pydata.org/do ...