很好的题解:http://www.cnblogs.com/zxndgv/archive/2011/08/06/2129333.html

题意:一个国王有n个王子,同时有n个女孩。每个王子都有自己喜欢的若干个女孩,现给定一个合法的完备匹配(也就是一个王子娶其中一个自己喜欢女孩),求每个王子可以选择哪些女孩可以让剩下的每个王子依旧能够选择到自己喜欢的一个女孩。

分析:草..居然是强连通图...主要事先给了一个完美匹配了,故可以用强连通图,在强连通图内王子可以娶自己喜欢的女孩...(尼玛变态,,,,给个匹配就变成别的算法了.)

详解看上面的链接..

// File Name: 1904.cpp
// Author: Zlbing
// Created Time: 2013/4/12 14:27:16

#include<iostream>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<stack>
#include<cmath>
#include<queue>
using namespace std;
#define CL(x,v); memset(x,v,sizeof(x));
#define INF 0x3f3f3f3f
#define LL long long
#define REP(i,r,n) for(int i=r;i<=n;i++)
#define RREP(i,n,r) for(int i=n;i>=r;i--)
const int MAXN=2005<<1;
vector<int> G[MAXN];
int lowlink[MAXN],sccno[MAXN],pre[MAXN];
int scc_cnt,dfs_clock;
stack<int> S;
int n;
void dfs(int u)
{pre[u]=lowlink[u]=++dfs_clock;S.push(u);for(int i=0;i<G[u].size();i++){int v=G[u][i];if(!pre[v]){dfs(v);lowlink[u]=min(lowlink[u],lowlink[v]);}else if(!sccno[v]){lowlink[u]=min(lowlink[u],pre[v]);}}if(lowlink[u]==pre[u]){scc_cnt++;for(;;){int t=S.top();S.pop();sccno[t]=scc_cnt;if(t==u)break;}}
}
void find_scc(){memset(sccno,0,sizeof(sccno));memset(lowlink,0,sizeof(lowlink));memset(pre,0,sizeof(pre));dfs_clock=0,scc_cnt=0;for(int i=1;i<=n;i++)if(!pre[i])dfs(i);
}int main()
{while(~scanf("%d",&n)){REP(i,1,n)G[i].clear();REP(i,1,n){int a,b;scanf("%d",&a);REP(j,1,a){scanf("%d",&b);G[i].push_back(b+n);}}REP(i,1,n){int a;scanf("%d",&a);G[a+n].push_back(i);}find_scc();REP(i,1,n){int k=sccno[i];vector<int> A;REP(j,1,G[i].size()){int u=G[i][j-1];if(sccno[u]==k)A.push_back(u-n);}sort(A.begin(),A.end());printf("%d",A.size());REP(i,1,A.size()){printf(" %d",A[i-1]);}printf("\n");}}return 0;
}

转载于:https://www.cnblogs.com/arbitrary/archive/2013/04/12/3016859.html

POJ-1904-King's Quest(强连通图)相关推荐

  1. poj 1904 King's Quest

    King's Quest 题意:有N个王子和N个妹子;(1 <= N <= 2000)第i个王子喜欢Ki个妹子:(详见sample)题给一个完美匹配,即每一个王子和喜欢的一个妹子结婚:问每 ...

  2. poj 1904 King's Quest 强连通分量+匹配

    ========== 题目链接King's Quest ============ 题解:通过原有的完美匹配,反向建边,在同一个强连通分量里面的王子和公主可以匹配,而不影响其他王子的结婚对象. //#i ...

  3. POJ 1904 King's Quest(强连通图)题解

    题意:n个王子有自己喜欢的ki个公主,有n个公主,每个王子只能娶一个自己喜欢的公主且不能绿别的王子.现在给你一种王子娶公主的方案,并且保证这种方案是正确的.请你给出,每个王子能娶哪些公主,要求娶这些公 ...

  4. POJ 1904 King's Quest(强连通分量)

    题目链接 Description Once upon a time there lived a king and he had N sons. And there were N beautiful g ...

  5. POJ - 1904 King's Quest 强连通tanjar思想

    传送门 题意:每个儿子都喜欢许多女孩,问每个渣男儿子最多有几个可以选择备胎.他爹也挺渣.. 猛地一看,哇二分匹配,但是想了想输入输出都能卡时间的题目,循环暴力二分匹配必T无疑,在做强连通模块的题所以想 ...

  6. POJ - 1904 King's Quest(强连通缩点)

    题目链接:点击查看 题目大意:给出n个王子和n个公主,每个王子都有喜欢的公主,每个王子初始时都娶到了一位喜欢的公主,题目需要我们求出每个王子所能娶的所有公主,必须保证王子娶了其中任何一个之后,其他的王 ...

  7. POJ 1904 【强连通分量】.cpp

    题意: 很久很久以前.. 有一个国王.. 他有好几个儿子.. 这些王子都喜欢上了邻国的公主.. 他们准备迎娶自己喜欢的公主中的一个.. 国王就让宰相给列一个清单.. 宰相就给了国王一个清单..上面写明 ...

  8. POJ 1364 King 差分约束系统

    Description Once, in one kingdom, there was a queen and that queen was expecting a baby. The queen p ...

  9. UVA1327 King‘s Quest(强连通分量、给王子们匹配公主系列 - 1 )

    让我们首先来考虑建图 如果王子u喜欢妹子v那我们可以从u向v连一条有向边 如果妹子v可以与王子u配对(即在配对表上),那我们可以从v向u连一条有向边 对于样例 如果王子和另一个姑娘在同一个连通分量上, ...

最新文章

  1. 删除linux系统中的ifcfg-eth0.bak
  2. arduino使用oled代码_Arduino提高篇06—温湿度OLED显示
  3. 转载:磁盘分区,一篇很好的文章
  4. matlab做比例积分微分控制,收放卷卷径计算+闭环摆杆控制参数自适应PID控制算法(变比例变积分变微分)介绍...
  5. Oracle优化笔记
  6. JAVA创建一个私有域_使用java基础反射访问私有域、方法和构造函数
  7. spring整合logback
  8. Netty 5.X 官方指南翻译版4
  9. html5手机的注册页面,H5页面结合vue实现登录注册组件
  10. Java开发规范之常量定义篇
  11. NXP JN5169使用硬件SPI读写NRF24L01
  12. Python爬虫获取京东大数据!其实爬虫真的很简单!
  13. C/C++动态开辟数组【C++:new/delete(推荐):int *arr = new int[m];】【C++:vector】【C:malloc() free()】
  14. 增强现实(AR)、虚拟现实(VR)、混合现实(MR)之间有什么区别?
  15. linux apt 更新软件,apt get 更新软件
  16. 使用python获取中国证券投资基金业协会上数据
  17. MySQL三种插入方式
  18. (Python)爬虫学习(一)
  19. 从0开始 独立完成企业级Java电商网站开发(服务端)
  20. ueEditor 增加插件,超级方便

热门文章

  1. leetcode —— 15. 三数之和
  2. 吴恩达深度学习 —— 2.12 向量化的更多例子
  3. Multi_thread--Linux进程编程基础介绍
  4. TCP流式套接字的异步事件WSAAsyncSelect编程
  5. 设计模式学习笔记——建造者(Builder)模式
  6. python父亲节符号_菲菲用python编程绘制的父亲节礼物
  7. 用友服务器显示禁用,包头用友 U6 运行时提示端口4630 被禁用 或者 1433端口不通...
  8. kafka 丢弃数据_Kafka史上最详细原理总结下
  9. springboot自动装配原理_【springboot】基于springboot运行原理实现springboot的自动配置...
  10. python不用模块调用麦克风_python调用pyaudio使用麦克风录制wav声音文件的教程