poj1236 Network of Schools【强连通分量(tarjan)缩点】
转载请注明出处,谢谢: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)缩点】的更多相关文章
- POJ1236 Network of Schools —— 强连通分量 + 缩点 + 入出度
题目链接:http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K Tot ...
- poj-1236.network of schools(强连通分量 + 图的入度出度)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 27121 Accepted: 10 ...
- POJ1236 Network of Schools (强连通分量,注意边界)
A number of schools are connected to a computer network. Agreements have been developed among those ...
- POJ 1236 Network of Schools(强连通分量/Tarjan缩点)
传送门 Description A number of schools are connected to a computer network. Agreements have been develo ...
- Network of Schools(强连通分量缩点(邻接表&矩阵))
Description A number of schools are connected to a computer network. Agreements have been developed ...
- POJ 1236 Network Of Schools (强连通分量缩点求出度为0的和入度为0的分量个数)
Network of Schools A number of schools are connected to a computer network. Agreements have been dev ...
- Network of Schools(强连通分量+缩点) (问添加几个点最少点是所有点连接+添加最少边使图强连通)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13801 Accepted: 55 ...
- [IOI1996] USACO Section 5.3 Network of Schools(强连通分量)
nocow上的题解很好. http://www.nocow.cn/index.php/USACO/schlnet 如何求强连通分量呢?对于此题,可以直接先用floyd,然后再判断. --------- ...
- 强连通分量tarjan缩点——POJ2186 Popular Cows
这里的Tarjan是基于DFS,用于求有向图的强联通分量. 运用了一个点dfn时间戳和low的关系巧妙地判断出一个强联通分量,从而实现一次DFS即可求出所有的强联通分量. §有向图中, u可达v不一定 ...
- POJ 1236 Network of Schools (强连通分量缩点求度数)
题意: 求一个有向图中: (1)要选几个点才能把的点走遍 (2)要添加多少条边使得整个图强联通 分析: 对于问题1, 我们只要求出缩点后的图有多少个入度为0的scc就好, 因为有入度的scc可以从其他 ...
随机推荐
- YII与Ace Admin 的集成
目录 一. 前言... 1 二.为什么要使用YII+ace. 1 三.新建YII模块... 1 四.如何修改模板... 3 五.注意的地方... 4 六.整合的不足之处... 4 一. 前言 yii- ...
- tomcat无法正常启动的一个原因
简要报错信息: java.lang.IllegalArgumentException: Document base E:\apache-tomcat-7.0.65\webapps\springmvc0 ...
- expect交互式自动化脚本
一 什么是expect 1 Expect is a tool for automating interactive applications such as telnet, ftp, passwd, ...
- 对discuz的代码分析学习(二)首页文件
如果当前地址栏存在查询字符,并且是一个数字,条件成立. 查询字符:www.baidu.com/index.php?aaa=bbb aaa=bbb就是查询字符如果条件成立,则把 ...
- BOOL、sizeof
BOOL使用前需要声明 #include <stdbool.h>(这个头文件定义了bool,true,false等宏) int a[5]; sizeof(a[5]),sizeof是关键字, ...
- OSG选中效果展示
<OpenSceneGraph三维渲染引擎编程指南>书中选中高亮效果示例.osgFX特效 2.得到鼠标的位置 osgFX特效1.高亮,在开头的时候写了: 2.线框: #include< ...
- 分享一个MD5加密工具类
来自:http://blog.csdn.net/zranye/article/details/8234480 Es:http://blog.csdn.net/longxibendi/article/d ...
- uva 719 Glass Beads(后缀自动机)
[题目链接] https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=524&am ...
- Java图形化界面设计——布局管理器之GridLayout(网格布局)
网格布局特点: l 使容器中的各组件呈M行×N列的网格状分布. l 网格每列宽度相同,等于容器的宽度除以网格的列数. l 网格每行高度相同,等于容器的高度除以网格的行数. l 各组件的排列方式 ...
- SQL存储过程动态查询数据区间
以前经常看到人查询数据库采用left join及case方式,一条一条的枚举查询整个数据的数据区间方法可行,但是数据一但很大,枚举就死悄悄,在网上查看,几乎全是照抄case ,left join枚举无 ...