hdoj4685
数据:
/*
99999
3 4
3 1 2 4
2 2 3
2 3 4
*/
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <stack>
#include <bitset>
#define mkp make_pair
using namespace std;
const double EPS=1e-;
typedef long long lon;
const lon SZ=,S=,T=,SSZ=*SZ,one=,INF=0x7FFFFFFF,mod=;
lon n,m,dfn[SSZ],low[SSZ],cnt,tot,bel[SSZ];
bool mp[SSZ][SSZ],ins[SSZ],mk[SSZ],sz[SSZ];
int src[SSZ][SSZ],dep[SSZ],num;
stack<lon> stk;
/*
99999
3 4
3 1 2 4
2 2 3
2 3 4
*/ bool bfs()
{
memset(dep,,sizeof(dep));
queue<int> q;
q.push(S);
dep[S]=;
for(;q.size();)
{
int fr=q.front();
q.pop();
//cout<<fr<<endl;
for(int i=;i<=T;++i)
{
if(src[fr][i]&&!dep[i])
{
dep[i]=dep[fr]+;
q.push(i);
if(i==T)return ;
}
}
}
return ;
} int dinic(int x,int flow)
{
if(x==T)return flow;
else
{
int rem=flow;
for(int i=;i<=T&&rem;++i)
{
if(src[x][i]&&dep[i]==dep[x]+)
{
int tmp=dinic(i,min(rem,src[x][i]));
if(!tmp)dep[i]=;
rem-=tmp;
src[x][i]-=tmp;
src[i][x]+=tmp;
}
}
return flow-rem;
}
} void init()
{
cin>>n>>m;
for(lon i=;i<=n;++i)
{
src[S][i]=;
lon knum;
cin>>knum;
for(lon j=;j<knum;++j)
{
lon id;
cin>>id;
mp[i][id+n]=;
src[i][id+n]=;
}
}
for(int i=;i<=m;++i)src[i+n][T]=;
for(;bfs();)
{
dinic(S,INF);
}
num=n+m;
for(lon i=;i<=n;++i)
{
int ok=;
for(int j=;j<=m;++j)
{
//cout<<i<<" "<<j<<" "<<src[i][j+n]<<" "<<mp[i][j+n]<<endl;
if(src[i][j+n]!=mp[i][j+n])
{
mp[j+n][i]=;
ok=;
}
}
if(!ok)
{
mk[i]=;//not used
++num;
for(int j=;j<=n;++j)
{
mp[j][num]=;
}
mp[num][i]=;
}
//cout<<mk[i]<<endl;
}
for(int i=;i<=m;++i)
{
//cout<<src[i+n][T]<<endl;
if(src[i+n][T]==)
{
sz[i]=;
++num;
for(int j=;j<=m;++j)
{
mp[num][j+n]=;
}
mp[i+n][num]=;
}
}
} void dfs(lon x)
{
dfn[x]=low[x]=++cnt;
stk.push(x);
ins[x]=;
for(lon i=;i<=num;++i)
{
if(mp[x][i])
{
if(!dfn[i])
{
dfs(i);
low[x]=min(low[x],low[i]);
}
else if(ins[i])low[x]=min(low[x],low[i]);
}
}
if(low[x]==dfn[x])
{
++tot;
for(;stk.size();)
{
lon top=stk.top();
stk.pop();
bel[top]=tot;
ins[top]=;
if(top==x)break;
}
}
} void work()
{
for(lon i=;i<=n+m;++i)if(!dfn[i])dfs(i);
for(lon i=;i<=n;++i)
{
vector<lon> ans;
//cout<<bel[i]<<" "<<bel[i+n]<<endl;
for(lon j=;j<=m;++j)
{
//cout<<sz[j+n]<<endl;
if(mp[i][j+n]&&bel[i]==bel[j+n])
{
ans.push_back(j);
}
}
cout<<ans.size();
sort(ans.begin(),ans.end());
for(lon j=;j<ans.size();++j)
{
cout<<" "<<ans[j];
}
cout<<endl;
}
for(lon i=;i<=n;++i)
{
src[S][i]=;
for(lon j=n+;j<=n+m;++j)mp[i][j]=mp[j][i]=src[i][j]=;
}
for(lon i=;i<=m;++i)
{
src[i+n][T]=;
}
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(bel,,sizeof(bel));
memset(mk,,sizeof(mk));
memset(sz,,sizeof(sz));
memset(ins,,sizeof(ins));
memset(mp,,sizeof(mp));
memset(src,,sizeof(src));
for(;stk.size();stk.pop());
cnt=tot=;
} int main()
{
std::ios::sync_with_stdio();
//freopen("d:\\1.txt","r",stdin);
lon casenum;
cin>>casenum;
//cout<<casenum<<endl;
for(int time=;time<=casenum;++time)
//for(lon time=1;cin>>n;++time)
{
//printf("Case #%d:\n",time);
cout<<"Case #"<<time<<":"<<endl;
init();
work();
}
return ;
}
hdoj4685的更多相关文章
随机推荐
- emoji表情softbank和unicode不兼容解决方案
https://blog.ernest.me/post/emoji-remapping-solution
- 项目实战:负载均衡集群企业级应用实战—LVS详解
目录 一.负载均衡集群介绍 二.lvs 的介绍 三.LVS负载均衡四种工作模式 1.NAT工作模式 2.DR工作模式 3.TUN工作模式 4.full-nat 工作模式 5.四者的区别 四.LVS i ...
- 1.认识Wireshark的主窗口界面(转)
原文地址:https://www.ichunqiu.com/vm/51411/1 (1)首先了解一下这款软件主窗口界面中每个部分的功能.Wireshark主窗口界面如下图所示: 上图中每部分的含义如下 ...
- iPhoneX快速适配,简单到你想哭。
研究了5个小时的iPhoneX适配. 从catalog,storyboard,safearea等一系列文章中发现.如果我们想完全撑满全屏.那直接建一个storyboard就好了.但撑满全屏后,流海就是 ...
- leaflet实用插件整理
leaflet实用插件整理: https://www.giserdqy.com/webgis/leaflet/4920/leaflet%E5%AE%9E%E7%94%A8%E6%8F%92%E4%BB ...
- 百度富文本Ueditor编辑器的使用
往在web开发的时候,尤其是在网站开发后台管理系统的时候经常会使用到富文本编辑器,这里我们来使用百度提供的富文本编辑器UEditor,以提高我们的开发效率 UEditor官网下载地址:https:// ...
- z-tree学习笔记
做项目时,需要用到带复选框的tree.经比较后优选了ztree,功能强大,文档清晰. http://www.treejs.cn/v3/api.php 直接上代码吧. 1.下载ztree后.将里面需要用 ...
- git之摘抄
vn中央集权, 统一服务器, 权限安全管理 git 分布式,代码仓库历史本地有,不受约束, 可以随意开分支.
- 设置vim支持gbk
linux下的默认字符集是utf-8,但Windows下默认是GBK,如果我们在linux下打开Windows中的文件就很容乱码,可以通过下面的设置使vim支持GBK编码. 首先,确认你的系统中安装了 ...
- GDscript风格指南
(惯例感谢godot开发组~~·) 缩进 缩进类型:Tabs (编辑器默认) 缩进大小:4 (编辑器默认) 每个缩进级别必须大于包含它的代码块. 良好的: for i in range(10): pr ...