POJ1904 强联通(最大匹配可能性)
题意:
有n个王子,n个公主,然后给你每个王子喜欢的公主,最后问你在不影响最大匹配的前提下,每个王子可以匹配那些公主。
思路:
是hdu4685的减弱版,之前研究过hdu4685所以这个题目直接水过了,对于这个题目,我们把王子和他喜欢的公主之间建连边,建立一个二分图,然后对于题目给的已经匹配好了的(有的题目没给,直接就自己跑一边二分匹配自己找),之间建立反边,就是建立公主到王子的边,然后一遍强联通,如果同意个分量里的男女可以匹配。这样记录每一个然后sort一下就行了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#define N_node 5000
#define N_edge 1000000
using namespace std;
typedef struct
{
int to ,next;
}STAR;
STAR E1[N_edge] ,E2[N_edge];
int list1[N_node] ,list2[N_node] ,tot;
int Belong[N_node] ,cont;
int mark[N_node];
int ans[N_node];
stack<int>st;
void add(int a ,int b)
{
E1[++tot].to = b;
E1[tot].next = list1[a];
list1[a] = tot;
E2[tot].to = a;
E2[tot].next = list2[b];
list2[b] = tot;
}
void DFS1(int s)
{
mark[s] = 1;
for(int k = list1[s] ;k ;k = E1[k].next)
{
int to = E1[k].to;
if(!mark[to]) DFS1(to);
}
st.push(s);
}
void DFS2(int s)
{
mark[s] = 1;
Belong[s] = cont;
for(int k = list2[s] ;k ;k = E2[k].next)
{
int to = E2[k].to;
if(!mark[to]) DFS2(to);
}
}
int main ()
{
int n ,i ,j ,a ,nn;
while(~scanf("%d" ,&n))
{
memset(list1 ,0 ,sizeof(list1));
memset(list2 ,0 ,sizeof(list2));
tot = 1;
for(i = 1 ;i <= n ;i ++)
{
scanf("%d" ,&nn);
for(j = 1 ;j <= nn ;j ++)
{
scanf("%d" ,&a);
add(i ,a + n);
}
}
for(i = 1 ;i <= n ;i ++)
{
scanf("%d" ,&a);
add(a + n ,i);
}
memset(mark ,0 ,sizeof(mark));
while(!st.empty()) st.pop();
for(i = 1 ;i <= n + n ;i ++)
{
if(!mark[i]) DFS1(i);
}
memset(mark ,0 ,sizeof(mark));
cont = 0;
while(!st.empty())
{
int to = st.top();
st.pop();
if(!mark[to])
{
cont ++;
DFS2(to);
}
}
for(i = 1 ;i <= n ;i ++)
{
int tt = 0;
for(int k = list1[i] ;k ;k = E1[k].next)
{
int to = E1[k].to;
if(Belong[i] == Belong[to])
ans[++tt] = to - n;
}
sort(ans + 1 ,ans + tt + 1);
printf("%d" ,tt);
for(j = 1 ;j <= tt ;j ++)
printf(" %d" ,ans[j]);
puts("");
}
}
return 0;
}
POJ1904 强联通(最大匹配可能性)的更多相关文章
- HDU 4685 Prince and Princess(二分匹配+强联通分量)
题意:婚配问题,但是题目并不要求输出最大匹配值,而是让我们输出,一个王子可以与哪些王妃婚配而不影响最大匹配值. 解决办法:先求一次最大匹配,如果有两个已经匹配的王妃,喜欢她们两个的有两个或者以上相同的 ...
- Kosaraju算法---强联通分量
1.基础知识 所需结构:原图.反向图(若在原图中存在vi到vj有向边,在反向图中就变为vj到vi的有向边).标记数组(标记是否遍历过).一个栈(或记录顶点离开时间的数组). 算法描叙: :对 ...
- [CF #236 (Div. 2) E] Strictly Positive Matrix(强联通分量)
题目:http://codeforces.com/contest/402/problem/E 题意:给你一个矩阵a,判断是否存在k,使得a^k这个矩阵全部元素都大于0 分析:把矩阵当作01矩阵,超过1 ...
- 强联通 poj 2762
t个样例 (注意清零) n个点m条边 有向; 任意2点是否能从a->b或者b->a; Yes No #include<stdio.h> #include<algo ...
- UVa 11324 & 强联通分量+DP
题意: 一张无向图,求点集使其中任意两点可到达. SOL: 强联通分量中的点要么不选要么全都选,然后缩点DAG+DP 记录一下思路,不想写了...代码满天飞.
- BZOJ 1051 & 强联通分量
题意: 怎么说呢...这种题目有点概括不来....还是到原题面上看好了... SOL: 求出强联通分量然后根据分量重构图,如果只有一个点没有出边那么就输出这个点中点的数目. 对就是这样. 哦还有论边双 ...
- 洛谷 P2661 信息传递 Label:并查集||强联通分量
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- POJ 1236-Network of Schools (图论-有向图强联通tarjan)
题目链接:http://poj.org/problem?id=1236 题目大意:N(2<N<100)个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输.问题 ...
- POJ 2186-Popular Cows (图论-强联通分量Korasaju算法)
题目链接:http://poj.org/problem?id=2186 题目大意:有n头牛和m对关系, 每一对关系有两个数(a, b)代表a牛认为b牛是“受欢迎”的,且这种关系具有传递性, 如果a牛认 ...
随机推荐
- 剑指 Offer 34. 二叉树中和为某一值的路径 + 记录所有路径
剑指 Offer 34. 二叉树中和为某一值的路径 Offer_34 题目详情 题解分析 本题是二叉树相关的题目,但是又和路径记录相关. 在记录路径时,可以使用一个栈来存储一条符合的路径,在回溯时将进 ...
- 剑指 Offer 13. 机器人的运动范围 + 深搜 + 递归
剑指 Offer 13. 机器人的运动范围 题目链接 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2020/12/ ...
- Spring笔记(10) - 日志体系
一.概况 在项目开发当中,日志对于我们开发或运维人员来说,是一个必不可少的工具.在线下我们可以通过 debug 来查找排除问题,但对于线上系统来说,我们只能通过日志分析来查找问题,我们可以通过日志打印 ...
- CVE-2018-2628-WLS Core Components 反序列化
漏洞参考 https://blog.csdn.net/csacs/article/details/87122472 漏洞概述:在 WebLogic 里,攻击者利用其他rmi绕过weblogic黑名单限 ...
- golang——net/rpc/jsonrpc包学习
1.jsonrpc包 该实现了JSON-RPC的ClientCodec和ServerCodec接口,可用于rpc包. 可用于跨语言使用go rpc服务. 2.常用方法 (1)func Dial(net ...
- CF1149C Tree Generator™
一.题目 点此看题 二.解法 话说老师给的课件是错的啊,把我坑了好久,我手玩样例才玩出来,最后只能去看洛谷题解了. 本题是树是用一个括号序列给出的,你要知道的是:( 代表递归下去到一个新节点,) 表示 ...
- mobx 的学习
1.初始化项目 第一步用create-react-app初始化一个项目,并打开webpack配置项 npx create-react-app react-mobx-demo cd react-mobx ...
- python-类的隐藏和封装
7 """ 8 封装是面对对象的三大特征之一(另外两个是集成和多态),它指的是将对象> 的信息隐藏在对象的内部,不允许外部程序直接访问对象内部信息,而是通> ...
- 使用MyBatis的步骤
1.创建空的Java工程,安装MyBatis依赖 <?xml version="1.0" encoding="UTF-8"?> <projec ...
- 对用pyinstaller打包的exe程序进行反编译,获得源码
参考文章: 1.https://www.cnblogs.com/DirWang/p/12018949.html#PyInstallerExtractor 2.https://msd.misuland. ...