POJ 1904 King's Quest(强连通)
Language:
Default
King's Quest
Description
Once upon a time there lived a king and he had N sons. And there were N beautiful girls in the kingdom and the king knew about each of his sons which of those girls he did like. The sons of the king were young and light-headed, so it was possible for one son
to like several girls. So the king asked his wizard to find for each of his sons the girl he liked, so that he could marry her. And the king's wizard did it -- for each son the girl that he could marry was chosen, so that he liked this girl and, of course, each beautiful girl had to marry only one of the king's sons. However, the king looked at the list and said: "I like the list you have made, but I am not completely satisfied. For each son I would like to know all the girls that he can marry. Of course, after he marries any of those girls, for each other son you must still be able to choose the girl he likes to marry." The problem the king wanted the wizard to solve had become too hard for him. You must save wizard's head by solving this problem. Input
The first line of the input contains N -- the number of king's sons (1 <= N <= 2000). Next N lines for each of king's sons contain the list of the girls he likes: first Ki -- the number of those girls, and then Ki different integer numbers, ranging from 1 to
N denoting the girls. The sum of all Ki does not exceed 200000. The last line of the case contains the original list the wizard had made -- N different integer numbers: for each son the number of the girl he would marry in compliance with this list. It is guaranteed that the list is correct, that is, each son likes the girl he must marry according to this list. Output
Output N lines.For each king's son first print Li -- the number of different girls he likes and can marry so that after his marriage it is possible to marry each of the other king's sons. After that print Li different integer numbers denoting those girls, in
ascending order. Sample Input 4 Sample Output 2 1 2 Hint
This problem has huge input and output data,use scanf() and printf() instead of cin and cout to read data to avoid time limit exceed.
Source |
借鉴链接:http://blog.csdn.net/l04205613/article/details/6654820
题意是,N个男生和N个女生,告诉你每一个男生喜欢的女生编号,然后给出一个初始匹配(这个初始匹配是完备匹配),然后求全部可能的完备匹配,按升序输出。当然。假设暴整的话(当然我没试过)。2000个男生+2000个女生,最多有20W条有向边
看了一个神牛的报告,把这个转化成强连通问题:
首先依照给出的有向边建图,然后依据最后的那个完备匹配在图中增加反向边(就是依据那个完备匹配连 女生 到 男生 的边),那么在这个图中,属于同一个强连通的点对一定是合法点对。把他们排序输出就可以。
由于男生是不会爱男生的。所以假设是强连通,那么男生肯定是爱这个强连通分量中的全部女生的
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map> #define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1) #define eps 1e-8
typedef __int64 ll; #define fre(i,a,b) for(i = a; i <b; i++)
#define free(i,b,a) for(i = b; i >= a;i--)
#define mem(t, v) memset ((t) , v, sizeof(t))
#define ssf(n) scanf("%s", n)
#define sf(n) scanf("%d", &n)
#define sff(a,b) scanf("%d %d", &a, &b)
#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
#define pf printf
#define bug pf("Hi\n") using namespace std; #define INF 0x3f3f3f3f
#define N 20000 int ans[N],time_num,time[N],low[N],type[N],cnt;
int instack[N];
int n; vector<int>g[N];
stack<int>q; void tarjan(int x)
{
int i,j;
time[x]=low[x]=++time_num;
instack[x]=1;
q.push(x);
fre(i,0,g[x].size())
{
int to=g[x][i];
if(time[to]==0)
{
tarjan(to);
if(low[to]<low[x]) low[x]=low[to];
}
else
if(instack[to]&&low[x]>low[to])
low[x]=low[to];
}
int to;
if(time[x]==low[x])
{
cnt++; do{
to=q.top();
q.pop();
type[to]=cnt;
instack[to]=0; }while(to!=x);
}
} void solve()
{
int i,j;
mem(time,0);
mem(low,0);
mem(instack,0);
time_num=0; int k;
while(!q.empty()) q.pop(); mem(type,0);
cnt=0; fre(i,1,n*2+1)
if(time[i]==0)
tarjan(i); fre(i,1,n+1)
{
k=0;
fre(j,0,g[i].size())
if(type[i]==type[g[i][j]])
ans[k++]=g[i][j]-n; sort(ans,ans+k); pf("%d",k);
fre(j,0,k)
pf(" %d",ans[j]);
pf("\n");
} }
int main()
{
int i,j;
while(~sf(n))
{
fre(i,1,n+n+1)
g[i].clear(); int k,x;
fre(i,1,n+1)
{ sf(k);
while(k--)
{
sf(x);
g[i].push_back(n+x); //男生爱女生
}
} fre(i,1,n+1)
{
sf(x);
g[x+n].push_back(i); //女生爱男生,假设这一种爱的关系是一种强连通。那么男生都能够选里面的女生
}
solve();
}
return 0;
}
POJ 1904 King's Quest(强连通)的更多相关文章
- Poj 1904 King's Quest 强连通分量
题目链接: http://poj.org/problem?id=1904 题意: 有n个王子和n个公主,王子只能娶自己心仪的公主(一个王子可能会有多个心仪的公主),现已给出一个完美匹配,问每个王子都可 ...
- POJ 1904 King's Quest ★(强连通分量:可行完美匹配边)
题意 有n个女生和n个男生,给定一些关系表示男生喜欢女生(即两个人可以结婚),再给定一个初始匹配,表示这个男生和哪个女生结婚,初始匹配必定是合法的.求每个男生可以和哪几个女生可以结婚且能与所有人不发生 ...
- [poj 1904]King's Quest[Tarjan强连通分量]
题意:(当时没看懂...) N个王子和N个女孩, 每个王子喜欢若干女孩. 给出每个王子喜欢的女孩编号, 再给出一种王子和女孩的完美匹配. 求每个王子分别可以和那些女孩结婚可以满足最终每个王子都能找到一 ...
- POJ 1904 King's Quest (强连通分量+完美匹配)
<题目链接> 题目大意: 有n个王子,每个王子都有k个喜欢的妹子,每个王子只能和喜欢的妹子结婚,大臣给出一个匹配表,每个王子都和一个妹子结婚,但是国王不满意,他要求大臣给他另一个表,每个王 ...
- POJ - 1904 King's Quest (强连通)
题意:有N个王子,每个王子有任意个喜欢的妹子,巫师会给出一个方案:每个妹子都嫁给一个王子.但是国王希望知道:每个王子能在哪些妹子中择偶而不影响其他王子择偶. 分析:设王子为x部,妹子为y部,假设有匹配 ...
- POJ 1904 King's Quest 强连通分量+二分图增广判定
http://www.cnblogs.com/zxndgv/archive/2011/08/06/2129333.html 这位神说的很好 #include <iostream> #inc ...
- POJ 1904 King's Quest tarjan
King's Quest 题目连接: http://poj.org/problem?id=1904 Description Once upon a time there lived a king an ...
- poj 1904 King's Quest
King's Quest 题意:有N个王子和N个妹子;(1 <= N <= 2000)第i个王子喜欢Ki个妹子:(详见sample)题给一个完美匹配,即每一个王子和喜欢的一个妹子结婚:问每 ...
- POJ 1904 King's Quest(SCC的巧妙应用,思维题!!!,经典题)
King's Quest Time Limit: 15000MS Memory Limit: 65536K Total Submissions: 10305 Accepted: 3798 Ca ...
随机推荐
- 初识CocosCreator的一些问题
本文的cocos creator版本为v1.9.0,除此外大部分都是以v1.9.3版本 1.color赋值 cc.Label组件并没有颜色相关的属性,但是Node有color的属性. //如果4个参数 ...
- hadoop三种运行模式
1.单机模式:安装简单,几乎不用做任何配置,但仅限于调试用途 2.伪分布模式:在单节点上同时启动namenode.datanode.jobtracker.tasktracker.secondaryna ...
- 域名DNS解析工具ping/nslookup/dig/host
常见 DNS 记录的类型 类型 目的 A 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录. AAAA 用来指定主机名(或域名)对应的 IPv6 地址 ...
- PHP内置的预定义常量大全
URL:http://www.php.net/manual/en/reserved.constants.php 预定义常量:核心预定义常量,标准预定义常量----------------------- ...
- SpringBoot(八):系统错误统一拦截器
在日常 web 开发中发生了异常,往往需要通过一个统一的 异常处理,来保证客户端能够收到友好的提示.本文将会介绍 Spring Boot 中的 全局统一异常处理. Springboot的全局异常查是通 ...
- Android性能优化-App启动优化
原文地址:https://developer.android.com/topic/performance/launch-time.html#common 通常用户期望app响应和加载速度越快越好.一个 ...
- 动态规划之 <筷子>
描述 A 先生有很多双筷子.确切的说应该是很多根,因为筷子的长度不一,很难判断出哪两根是一双的.这天,A 先生家里来了K 个客人,A 先生留下他们吃晚饭.加上A 先生,A夫人和他们的孩子小A,共K+3 ...
- Linux 下hosts文件详解
1.主机名: 无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号. 公网:IP地址不方便记忆,所以又有了域名.域名只是在公网( ...
- .Net可扩展的单据编号生成器-SNF.CodeRule--SNF快速开发平台3.2
1.背景 在企业应用中单据编号的自定义是一个很常见的需求,如工号.业务单据编码等,能不能抽象一个通用的框架呢? 2.思路 这里的难点在于实现"解释器",比如将"前缀&qu ...
- Socket网络编程--简单Web服务器(6)
本来是想实现ssl连接的,但是弄了好久都不成功,就索性不做了,等以后有能力再做了.所以这一小节就是本次的最后一节了.就简单的说几个注意点. 1.加个配置文件 使用单例模式,使用一个类,该类保存一些信息 ...