大致题意给你有一个点数为n<=100的有向图。

求解两个子任务:

1:最少给多少个点信息,这些点的信息可以顺着有向边传遍全图。

2:最少要加多少条边,使得整个图强联通。

求强联通分量再缩点后得到一个有向无环图。

设其入度为0的点数为t1,出度为0的点数为t2

1的答案即为强联通缩点之后入度为0的点的数量t1。

2的答案即为max(t1,t2).

注意一个特殊情况:若缩点后只有一个点了(即原图便是强联通的)此时t1=1,t2=1但是第二个任务的答案应当是0。

AC代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int MAXN=;
int n,cnt;
int graph[MAXN][MAXN];
int DFN[MAXN],low[MAXN],Stap[MAXN],label[MAXN];
bool instake[MAXN];
int Stop,Bcnt;
int adjm[MAXN][MAXN];
int in[MAXN],out[MAXN];
void init()
{
memset(graph,,sizeof(graph));
memset(DFN,,sizeof(DFN));
memset(in,,sizeof(in));
memset(out,,sizeof(out));
memset(adjm,,sizeof(adjm));
memset(instake,,sizeof(instake));
int t;
cnt=;Stop=;Bcnt=;
rep(i,,n)
{
while(scanf("%d",&t)==&&t)
{
graph[i][++graph[i][]]=t;
}
}
}
void tarjan(int u)
{
DFN[u]=low[u]=++cnt;
instake[u]=;
Stap[++Stop]=u;
rep(i,,graph[u][])
{
int v=graph[u][i];
if(!DFN[v])
{
tarjan(v);
if(low[v]<low[u]) low[u]=low[v];
}
else if(instake[v]&&DFN[v]<low[u]) low[u]=DFN[v];
}
int j;
if(DFN[u]==low[u])
{
++Bcnt;
do
{
j=Stap[Stop--];
instake[j]=;
label[j]=Bcnt;
}while(j!=u);
}
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d",&n)==)
{
init();
rep(i,,n)
{
if(!DFN[i]) tarjan(i);
}
if(Bcnt==)
{
printf("1\n0\n");continue;
}
rep(i,,n)
{
rep(j,,graph[i][])
{
int v=graph[i][j];
if(label[i]!=label[v])
{
out[label[i]]++;
in[label[v]]++;
}
}
}
int t1=,t2=;
rep(i,,Bcnt)
{
if(in[i]==) t1++;
if(out[i]==) t2++;
}
printf("%d\n%d\n",t1,max(t1,t2));
}
return ;
}

poj 1236 强联通分量的更多相关文章

  1. POJ 2186 强联通分量

    点击打开链接 题意:牛A喜欢牛B,若牛B喜欢牛C,则牛A喜欢牛C,问最后多少牛被其它全部牛喜欢 思路:用强联通分量进行缩点,最后形成的图是有向无环图DAG.而拓扑序的值为DAG的长度,则加一,可是最后 ...

  2. 【POJ 1236 Network of Schools】强联通分量问题 Tarjan算法,缩点

    题目链接:http://poj.org/problem?id=1236 题意:给定一个表示n所学校网络连通关系的有向图.现要通过网络分发软件,规则是:若顶点u,v存在通路,发给u,则v可以通过网络从u ...

  3. POJ 2186-Popular Cows (图论-强联通分量Korasaju算法)

    题目链接:http://poj.org/problem?id=2186 题目大意:有n头牛和m对关系, 每一对关系有两个数(a, b)代表a牛认为b牛是“受欢迎”的,且这种关系具有传递性, 如果a牛认 ...

  4. POJ 2186 Popular Cows(强联通分量)

    题目链接:http://poj.org/problem?id=2186 题目大意:    每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种 ...

  5. POJ 2186 Popular cows(Kosaraju+强联通分量模板)

    题目链接:http://poj.org/problem?id=2186 题目大意:给定N头牛和M个有序对(A,B),(A,B)表示A牛认为B牛是红人,该关系具有传递性,如果牛A认为牛B是红人,牛B认为 ...

  6. POJ 1904 King's Quest 强联通分量+输入输出外挂

    题意:国王有n个儿子,现在这n个儿子要在n个女孩里选择自己喜欢的,有的儿子可能喜欢多个,最后国王的向导给出他一个匹配.匹配有n个数,代表某个儿子和哪个女孩可以结婚.已知这些条件,要你找出每个儿子可以和 ...

  7. Kosaraju算法---强联通分量

    1.基础知识 所需结构:原图.反向图(若在原图中存在vi到vj有向边,在反向图中就变为vj到vi的有向边).标记数组(标记是否遍历过).一个栈(或记录顶点离开时间的数组).      算法描叙: :对 ...

  8. [CF #236 (Div. 2) E] Strictly Positive Matrix(强联通分量)

    题目:http://codeforces.com/contest/402/problem/E 题意:给你一个矩阵a,判断是否存在k,使得a^k这个矩阵全部元素都大于0 分析:把矩阵当作01矩阵,超过1 ...

  9. UVa 11324 & 强联通分量+DP

    题意: 一张无向图,求点集使其中任意两点可到达. SOL: 强联通分量中的点要么不选要么全都选,然后缩点DAG+DP 记录一下思路,不想写了...代码满天飞.

随机推荐

  1. python中几种循环体

    条件判断与循环 1.条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: < ...

  2. Hadoop---桥接集群的搭建

    Hadoop---桥接群的搭建 集群分配:(一主四从)   我电脑的虚拟机:hadoop4:namenode+datanode+resourceManager 我one-friend的电脑虚拟机:hm ...

  3. Lamda 表达式里的Join和GroupJoin的区别, 如何实现SQL的Left Join效果

    例如,可以将产品表与产品类别表相联接,得到产品名称和与其相对应的类别名称 db.Products .Join ( db.Categories, p => p.CategoryID, c => ...

  4. pre强制 自动换行

    转自:http://www.16sucai.com/2010/10/941.html <pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会 ...

  5. linux nginx 添加到全局变量中(环境变量)

    ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/ /usr/local/bin/就是环境变量目录

  6. 【原创】<Debug> “duplicate connection name”

    [Problem] duplicate connection name [Solution] 在Qt上使用SQLite的时候,如果第二次使用QSqlDatabase::addDatabase()方式时 ...

  7. day037 行记录的操作

    1.库操作 2.表操作 3.行操作 1.库操作 1)创建数据库 语法: create database 数据库名 charset utf8; 数据库命名规则: 由数字,字母,下划线,@,#,$ 等组成 ...

  8. 将远程mysql服务器数据导出 csv 并发送到我的本机

    1.在SQL上执行查询并导出操作 '; 2.发送到本机 SQL>system sz idIsNull2.csv;

  9. 《Python》并发编程

    手工操作 —— 穿孔卡片 1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式.此时还没有操作系统的概念.     程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输 ...

  10. SimpleDateFormat的安全问题解决方法

    问题: SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类. 而且SimpleDateFormat ...