King's Quest - poj 1904(强连通分量+外挂输入输出)
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std; const int MAXN = ; struct Edge{int v, next;}e[MAXN*];
int Head[MAXN], cnt;
int dfn[MAXN], low[MAXN], Index;
int Stack[MAXN], instack[MAXN], top;
int belong[MAXN], bnt;
int N;
bool love[][];
vector< vector <int> >ans; void InIt()
{
ans.clear();
ans.resize(MAXN); memset(love, false, sizeof(love));
memset(dfn, false, sizeof(dfn));
memset(Head, -, sizeof(Head)); cnt = Index = bnt = ;
}
void AddEdge(int u, int v)
{
e[cnt].v = v;
e[cnt].next = Head[u];
Head[u] = cnt++;
}
void Tarjan(int i)
{
int v; dfn[i] = low[i] = ++Index;
Stack[++top] = i, instack[i] = true; for(int j=Head[i]; j!=-; j=e[j].next)
{
v = e[j].v; if( !dfn[v] )
{
Tarjan(v);
low[i] = min(low[i], low[v]);
}
else if( instack[v] )
low[i] = min(low[i], dfn[v]);
} if(low[i] == dfn[i])
{
++bnt;
do
{
v = Stack[top--];
instack[v] = false;
belong[v] = bnt;
if(v > N)
ans[bnt].push_back(v-N);
}
while(i != v);
}
} int Scan() { //输入外挂
int res = , flag = ;
char ch;
if((ch = getchar()) == '-') flag = ;
else if(ch >= '' && ch <= '') res = ch - '';
while((ch = getchar()) >= '' && ch <= '')
res = res * + (ch - '');
return flag ? -res : res;
} void Out(int a) { //输出外挂
if(a < ) { putchar('-'); a = -a; }
if(a >= ) Out(a / );
putchar(a % + '');
} int main()
{
while(scanf("%d", &N) != EOF)
{
int i, v, M; InIt(); for(i=; i<=N; i++)
{
M = Scan(); while(M--)
{
v = Scan();
AddEdge(i, v+N);
love[i][v] = true;
}
} for(i=; i<=N; i++)
{
v = Scan();
AddEdge(v+N, i);
love[i][v] = true;
} for(i=; i<=N*; i++)
{
if( !dfn[i] )
Tarjan(i);
} for(i=; i<=N; i++)
{
v = belong[i]; int j, len = ans[v].size();
int a[MAXN], t=; for(j=; j<len; j++)
{
if( love[i][ ans[v][j] ] == true )
a[t++] = ans[v][j];
} sort(a, a+t); printf("%d", t);
for(j=; j<t; j++)
{
putchar(' ');
Out(a[j]);
}
printf("\n");
}
} return ; }
King's Quest - poj 1904(强连通分量+外挂输入输出)的更多相关文章
- poj 1904(强连通分量+输入输出外挂)
题目链接:http://poj.org/problem?id=1904 题意:有n个王子,每个王子都有k个喜欢的妹子,每个王子只能和喜欢的妹子结婚,大臣给出一个匹配表,每个王子都和一个妹子结婚,但是国 ...
- poj 1904(强连通分量+完美匹配)
传送门:Problem 1904 https://www.cnblogs.com/violet-acmer/p/9739990.html 参考资料: [1]:http://www.cnblogs.co ...
- poj 1904 强连通分量
思路:先有每个儿子向所有他喜欢的姑娘建边,对于最后给出的正确匹配,我们建由姑娘到相应王子的边.和某个王子在同一强连通分量,且王子喜欢的姑娘都是该王子能娶得.思想类似匈牙利算法求匹配的时候,总能找到增广 ...
- King's Quest POJ - 1904(强连通分量)
建图:王子u喜欢女孩v,则u到v连一条边.对于给出的初始完美匹配,王子u与女孩v匹配,则v到u连一条边.然后求SCC. 显然对于同一个SCC中王子数目和女孩数目是相等的,并且从某个王子出发能够到达所有 ...
- King's Quest POJ - 1904 匈牙利算法的思想+tarjan缩点+染色
题目链接:https://cn.vjudge.net/problem/POJ-1904 自己一开始的想法,打算用匈牙利算法实现,找二分图的最大匹配.但是打了打发现,不太好实现.原因如下:匈牙利算法是不 ...
- poj 2186 强连通分量
poj 2186 强连通分量 传送门 Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 33414 Acc ...
- poj 2762(强连通分量+拓扑排序)
题目链接:http://poj.org/problem?id=2762 题意:给出一个有向图,判断任意的两个顶点(u,v)能否从u到达v,或v到达u,即单连通,输出Yes或No. 分析:对于同一个强连 ...
- poj 1236(强连通分量分解模板题)
传送门 题意: N(2<N<100)个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输. 问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都 ...
- POJ(2186)强连通分量分解
#include<cstdio> #include<vector> #include<cstring> using namespace std; ; vector& ...
随机推荐
- SPOJ 3943 - Nested Dolls 最长不下降子序列LIS(二分写法)
现在n(<=20000)个俄罗斯套娃,每个都有宽度wi和高度hi(均小于10000),要求w1<w2并且h1<h2的时候才可以合并,问最少能剩几个. [LIS]乍一看跟[这题]类似, ...
- Session深入理解
Session是在什么情况下产生的 客户端访问服务器端,服务器端为每个用户生成一个唯一的sessionId,是这样吗?sessionId的作用是什么? http://www.cnblogs.com/s ...
- Oracle Pivot学习心得
今天在做一个查询报表需要将多行的查询结果转换成一行,数据格式如下 ID Type Parameter Value Machine_NO Operator UpdateTime 1 11111111 ...
- Qt零基础教程(四)QWidget详解(3):QWidget的几何结构
Qt零基础教程(四) QWidget详解(3):QWidget的几何结构 这篇文章里面分析了QWidget中常用的几种几何结构 下图是Qt提供的分析QWidget几何结构的一幅图,在帮助的 Wind ...
- PHP获取函数返回值的引用
通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;}
- How to scroll the window using JQuery $.scrollTo() function
$('html, body').animate({scrollTop: $("#page").offset().top}, 2000); http://stackoverflow. ...
- Linux 4.1内核编译报告
编译环境 Arch Linux on VirtualBox 下载内核 https://www.kernel.org/ 下载的内核压缩包,此时的最新内核版本为4.1: 解压包 # tar -xvJf l ...
- extjs combobox 设置下拉时显示滚动条 设置显示条数
extjs在点击下拉时如果没有限制它的高度,那么它的默认最大高度是300,显示的时候就会显示300的高度,知道选项内容超过这个高度时才会自动显示滚动条,往往在有些时候我们希望让combobox显示一个 ...
- ASP.Net string 类的扩展方法 [转]
string 类的扩展方法列表(基本相同于 IEnumerable<T> 接口的成员列表): Aggregate<> //累加 All<> / ...
- Pycharm常用快捷键(后期慢慢补充)
用到一个,就补充一个,慢慢来,找到自己常用的快捷键. CTRL /: 注释.取消注释行 CTRL Q: 在参数列表位置,显示可以输入的所有参数. #查看参数的详细信息