博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1904 King's Quest tarjan求二分图的所有可选最大匹配边
阅读量:6220 次
发布时间:2019-06-21

本文共 2119 字,大约阅读时间需要 7 分钟。

因为是完美匹配,所以每个点都已经匹配了,那么如果要选择一条别的边,增光路的最后必定找到原来所匹配的点,加上匹配的边,那么就是一个环。所以可选边在一个强连通分量里。

 

#include 
#include
#include
using namespace std;const int maxn=4e3+9;int mt[maxn];int low[maxn],dfn[maxn],instack[maxn],count;int s[maxn],stack[maxn],top,con;int head[maxn],lon;int ans[maxn],n;struct{ int next,to;}e[200000+maxn];void edgeini(){ memset(head,-1,sizeof(head)); lon=-1;}void edgemake(int from,int to){ e[++lon].to=to; e[lon].next=head[from]; head[from]=lon;}void tarjan(int t){ low[t]=dfn[t]=++count; instack[t]=1; stack[++top]=t; for(int k=head[t],u;k!=-1;k=e[k].next) { u=e[k].to; if(dfn[u]==-1) { tarjan(u); low[t]=min(low[t],low[u]); } else if(instack[u]) { low[t]=min(low[t],dfn[u]); } } if(low[t]==dfn[t]) { ++con; while(1) { int u=stack[top--]; s[u]=con; instack[u]=0; if(u==t) break; } }}void tarjan(){ memset(dfn,-1,sizeof(dfn)); memset(instack,0,sizeof(instack)); top=count=con=0; for(int i=1;i<=n;i++) if(dfn[i]==-1) { tarjan(i); }}int main(){// freopen("in.txt","r",stdin); while(scanf("%d",&n)!=EOF) { edgeini(); for(int i=1,tmp;i<=n;i++) { scanf("%d",&tmp); for(int j=1,to;j<=tmp;j++) { scanf("%d",&to); edgemake(i,to+n); } } for(int i=1;i<=n;i++) { scanf("%d",&mt[i]); edgemake(mt[i]+n,i); } tarjan(); for(int i=1;i<=n;i++) { memset(ans,0,sizeof(ans)); int sum=0; for(int k=head[i];k!=-1;k=e[k].next) { int u=e[k].to; if(s[i]==s[u]) { sum++; ans[u-n]=1; } } printf("%d",sum); for(int i=1;i<=n;i++) if(ans[i]) printf(" %d",i); printf("\n"); } } return 0;}

 

 

转载地址:http://mzlja.baihongyu.com/

你可能感兴趣的文章
c/c++中保留两位有效数字
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
由String类的Split方法所遇到的两个问题
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
自制操作系统Antz day11——实现shell(下)命令响应
查看>>
windows查看端口占用
查看>>
strongswan ikev2 server on ubuntu 14.04
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
JDBC的事务
查看>>
linux服务器CPU参数/proc/cpuinfo
查看>>
haystack+Elasticsearch搜素引擎
查看>>
UEFI系统安装U盘的制作方式
查看>>
读《Oracle DBA工作笔记》知识点-获取创建语句
查看>>
Io流的概述
查看>>
js功能实现top轮播图
查看>>
App 卸载记录
查看>>
TCAM 与CAM
查看>>