pku 1904 king's Quest
2011-07-21 19:35
274 查看
题意:有n个男的,n个女的,每个男的都有自己喜欢的女孩(可以是多个),给你个初始匹配,问你每个男的可以和哪些女的结婚。可以的意思是:这个男的和这个女的结婚后对于其他的人都存在一个女孩能和他结婚分析:匹配的本质是增广路,将问题转化为求强连通分量
代码:
代码:
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define N 4050 #define M 250000 #define min(a,b) (((a)<(b))?(a):(b)) int n,e,head ,nxt[M],pnt[M]; int t,top,num,time ,low ,s ,belong ; char vis ,instack ; void addedge(int u,int v) { pnt[e]=v; nxt[e]=head[u]; head[u]=e++; } void dfs(int u) { int i,v,k; vis[u]=instack[u]=1; time[u]=low[u]=t++; s[top++]=u; for(i=head[u];i!=-1;i=nxt[i]) { v=pnt[i]; if(vis[v]==0) { dfs(v); low[u]=min(low[u],low[v]); } else if(instack[v]&&low[u]>time[v]) low[u]=time[v]; } if(low[u]==time[u]) { do{ k=s[--top]; belong[k]=num; instack[k]=0; }while(top>0&&k!=u); num++; } } void tarjan() { int i; t=top=0;num=1; memset(vis,0,sizeof(vis)); memset(instack,0,sizeof(instack)); for(i=1;i<=n+n;i++) if(!vis[i]) dfs(i); } int ans1[M]; int main() { int i,j,k,num,ans; while(scanf("%d",&n)!=EOF) { e=0;memset(head,-1,sizeof(head)); for(i=1;i<=n;i++) { scanf("%d",&num); for(j=0;j<num;j++) { scanf("%d",&k); addedge(i,k+n); } } for(i=1;i<=n;i++) { scanf("%d",&k); addedge(k+n,i); } tarjan(); for(i=1;i<=n;i++) { ans=num=0; for(j=head[i];j!=-1;j=nxt[j]) if(belong[i]==belong[pnt[j]]) { ans++; ans1[num++]=pnt[j]; } printf("%d",ans); sort(ans1,ans1+num); for(j=0;j<num;j++) printf(" %d",ans1[j]-n); printf("\n"); } } return 0; }
相关文章推荐
- pku 1904 King's Quest
- POJ 1904 King's Quest
- Hoj 1520 The Bottom of a Graph/Poj 2186 Popular Cows/Poj 1904 King's Quest
- POJ 1904 King's Quest
- poj 1904 King's Quest
- POJ-1904 King's Quest
- King's Quest —— POJ1904(ZOJ2470)Tarjan缩点
- PKU1904 king's quest
- POJ 1904 King's Quest(强连通分量+匹配)
- POJ 1904 King's Quest强连通分量+二分图完美匹配
- poj 1904 King's Quest 强连通
- poj 1904 King's Quest(强连通分量)
- POJ 1904 King's Quest 强连通分量 好题
- POJ 1904 King's Quest(强连通)
- POJ 1904 King's Quest && HDU 4685 Prince and Princess (强联通解决二分图可行匹配问题)
- poj 1904 King's Quest 强连通分量
- POJ - 1904 King's Quest(强连通分量+二分图匹配)
- poj 1904 King's Quest 【建模 求解SCC】
- poj 1904 King's Quest(Tarjan+匹配)
- POJ 1904 King's Quest 强连通分量 +缩点+ 输入输出外挂 (非递归版trajan模板)