转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4316263.html  ---by 墨染之樱花

【题目链接】http://poj.org/problem?id=1236

【题目描述】给一张有向图,表示学校通信网络,边<u,v>代表信息可以由u传递到v。现要完成两个任务:1、求最少把几个点作为信息传递的起点就能让信息转达到所有节点 2、最少在添加几条边就能使任意两点间可达(构造强连通分量)

【思路】先利用tarjan缩点使整个图化为DAG新图(有关tarjan的详细资料请戳:https://www.byvoid.com/blog/scc-tarjan/)。

任务一:如果一个点没有入度,那就表示其他点是不可能到达它的,所以该点只能作为一个起点。那么任务一就是等价于求新图中入度为0的点的个数。

任务二:在DAG中从一个没有入度的点(点1)出发,不断地延伸,延伸到一个没有出度的点(点2)时才会停止,此时将点2与点1连接,那么这条路径就会变成一个环,路径各个点就会互相可达。对于整个图来说只要找出所有没入度的点和没出度的点并将它们一一连接就行了,保证每个点都有出度和入度。所以任务二等价于求新图中入度为0的点个数与出度为0的点个数的最大值

#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXN 110
#define PB(X) push_back(X)
#define REP(X,N) for(int X=0;X<N;X++)
#define CLR(A,X) memset(A,X,sizeof(A))
typedef vector<int> VI; int V,nV;
VI G[MAXN],nG[MAXN];
int low[MAXN],dfn[MAXN],st[MAXN],belong[MAXN];
int top,cnt,index;
bool inst[MAXN];
int ind[MAXN],outd[MAXN]; void init()
{
top=cnt=index=;
CLR(dfn,);
CLR(ind,);CLR(dfn,);
} void tarjan(int u)
{
low[u]=dfn[u]=++index;
st[top++]=u;
inst[u]=;
REP(i,G[u].size())
{
int v=G[u][i];
if(!dfn[v])
{
tarjan(v);
if(low[v]<low[u])
low[u]=low[v];
}
else if(inst[v] && dfn[v]<low[u])
low[u]=dfn[v];
}
int j;
if(low[u]==dfn[u])
{
cnt++;
do
{
j=st[--top];
inst[j]=;
belong[j]=cnt-;
}while(j!=u);
}
} int main()
{
init();
scanf("%d",&V);
REP(i,V)
{
int x;
while(scanf("%d",&x))
{
if(x==)
break;
x--;
G[i].PB(x);
}
}
REP(i,V)
if(!dfn[i])
tarjan(i);
nV=cnt;
if(nV==)
{
printf("1\n0\n");
return ;
}
REP(i,V)
{
REP(j,G[i].size())
{
int x=belong[i],y=belong[G[i][j]];
if(x!=y)
{
nG[x].PB(y);
ind[y]++;outd[x]++;
}
}
}
int noInd=,noOutd=;
REP(i,nV)
{
if(!ind[i])
noInd++;
if(!outd[i])
noOutd++;
}
printf("%d\n%d\n",noInd,max(noInd,noOutd));
return ;
}

poj1236 Network of Schools【强连通分量(tarjan)缩点】的更多相关文章

  1. POJ1236 Network of Schools —— 强连通分量 + 缩点 + 入出度

    题目链接:http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Tot ...

  2. poj-1236.network of schools(强连通分量 + 图的入度出度)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27121   Accepted: 10 ...

  3. POJ1236 Network of Schools (强连通分量,注意边界)

    A number of schools are connected to a computer network. Agreements have been developed among those ...

  4. POJ 1236 Network of Schools(强连通分量/Tarjan缩点)

    传送门 Description A number of schools are connected to a computer network. Agreements have been develo ...

  5. Network of Schools(强连通分量缩点(邻接表&矩阵))

    Description A number of schools are connected to a computer network. Agreements have been developed ...

  6. POJ 1236 Network Of Schools (强连通分量缩点求出度为0的和入度为0的分量个数)

    Network of Schools A number of schools are connected to a computer network. Agreements have been dev ...

  7. Network of Schools(强连通分量+缩点) (问添加几个点最少点是所有点连接+添加最少边使图强连通)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13801   Accepted: 55 ...

  8. [IOI1996] USACO Section 5.3 Network of Schools(强连通分量)

    nocow上的题解很好. http://www.nocow.cn/index.php/USACO/schlnet 如何求强连通分量呢?对于此题,可以直接先用floyd,然后再判断. --------- ...

  9. 强连通分量tarjan缩点——POJ2186 Popular Cows

    这里的Tarjan是基于DFS,用于求有向图的强联通分量. 运用了一个点dfn时间戳和low的关系巧妙地判断出一个强联通分量,从而实现一次DFS即可求出所有的强联通分量. §有向图中, u可达v不一定 ...

  10. POJ 1236 Network of Schools (强连通分量缩点求度数)

    题意: 求一个有向图中: (1)要选几个点才能把的点走遍 (2)要添加多少条边使得整个图强联通 分析: 对于问题1, 我们只要求出缩点后的图有多少个入度为0的scc就好, 因为有入度的scc可以从其他 ...

随机推荐

  1. codeforces 547B. Mike and Feet 单调栈

    题目链接 用单调栈计算出一个数字, 左边第一个比他小的数字的位置, 右边比第一个他小的数字的位置, 然后len = r[i] - l[i] +1. ans[len] = max(ans[len], a ...

  2. C#对象赋值出现的诡异问题,或许你也遇到过,有待你的解决

    前言:今天在代码中,又出现了这个问题,就是对象赋值给一个新的对象时,然后更改新对象中的属性,就会把老对象的值也更改,以前也遇到这个问题,只是没有深究,今天刚好又遇到了此问题,我决定写下来,和大家一起分 ...

  3. win7 gsoap与vs2010 c++创建Web Service

    ---恢复内容开始--- 之前曾经编写过简单的样例,很久没有碰过,发现已经全部忘记,如今又需要重新巩固一下. 首先是下载gsoap,无法访问官方下载页面,只能在网上搜索,找到一个2.8版本存入云盘以防 ...

  4. SMT贴片红胶基本知识

    SMT贴片红胶是一种聚稀化合物,与锡膏不同的是其受热后便固化,其凝固点温度为150℃,这时,红胶开始由膏状体直接变成固体. SMT贴片机装贴贴片具有粘度流动性,温度特性,润湿特性等.根据红胶的这个特性 ...

  5. MyEclipse启动时报 Unable to acquire application service. Ensure that the org.eclips

    今天MyEclipse启动时报如下错误: !SESSION 2012-02-12 11:32:55.198 ---------------------------------------------- ...

  6. Codeforces Round#1

    A. Theatre Square 题目大意:有一个长宽为m和n的广场,用边长为a的正方形去铺盖,问铺满最少需要多少正方形 题解:题目分解为用长度为a的线条分别去覆盖长度为m和n的线条,计算两者的乘积 ...

  7. 让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET

    让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET 让 QtWebkit 支持跨域CROS 2013-05-23 22:05 450人阅读 评论 ...

  8. jquery 使用ajax调用c#后台方法

    $.ajax({                         type: "get",                         cache: false,        ...

  9. 化简复杂逻辑,编写紧凑的if条件语句(二):依据if子句顺序化简条件

    <化简复杂逻辑,编写紧凑的if条件语句>已经得出了跳.等.飞.异常的各自条件,方便起见这里重新贴一下. 立即跃迁:!a && b && d 等待跃迁:!a ...

  10. Ubuntu 麒麟版下安装:Apache+php5+mysql+phpmyadmin.

    摘要 LAMP是Linux web服务器组合套装的缩写,分别是Apache+MySQL+PHP.此文记录在Ubuntu上安装Apache2服务器,包括PHP5(mod_php)+MySQL+phpmy ...