题意:

1.初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。

2.至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。

思路:

我们先把图中的强连通分量缩点

经过缩点后,就可以把强连通分量看成一个个独立的点,这张图可以模拟一下,有离散的点,有一些连起来的点,咳咳,但绝对不是连通的!

题目的问题1那不就是在新图上搞一搞出度==0的点的数量

题目的问题2要我们在这张新图上搞一个强连通图,我们可以根据强连通的性质,也就是每个点都要有被指向边和出去的边,那么也就是求一下每个点(强连通分量)的入度和出度,把出度==0的点个数加起来,把入度==0的点个数加起来,比一比谁大,输出谁,因为我们可以直接在入度为0和出度为0的两点间加边,所以取大的那个就满足。

这种题都一个套路。有点水的没意思了。如果没有搞过这种题,可以看我前面两篇blog…当然写的很水,主要可以我是想说可以做做那两题….

#include<iostream>
#include<cstdio>
#include<math.h>
#include<stdlib.h>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define N 110 int ma[N][N];
int dfn[N];
int low[N];
int stap[N];
int vis[N];
int in[N];
int tp,p,cnt;
int kc[N];
int kr[N];
int n; void tarjan(int u)
{
dfn[u]=low[u]=++tp;
stap[++p]=u;
vis[u]=1;
for(int i=1;i<=n;i++)
{
if(!ma[u][i])
continue;
if(!dfn[i])
{
tarjan(i);
low[u]=min(low[u],low[i]);
}
else if(vis[i])
{
low[u]=min(low[u],dfn[i]);
}
}
if(dfn[u]==low[u])
{
cnt++;
int temp;
while(1)
{
temp=stap[p];
vis[temp]=0;
in[temp]=cnt;
p--;
if(temp==u)
{
break;
}
}
}
} void fun()
{
int pc,pr; memset(kc,0,sizeof(kc));
memset(kr,0,sizeof(kr)); for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(ma[i][j]&&in[i]!=in[j])
{
kr[in[j]]++;
kc[in[i]]++;
}
}
} pc=pr=0;
for(int i=1;i<=cnt;i++)
{
if(!kr[i])
{
pr++;
}
if(!kc[i])
{
pc++;
}
}
if(cnt==1)
{
printf("1\n0\n");
}
else
printf("%d\n%d\n",pr,max(pr,pc));
} void init()
{
memset(ma,0,sizeof(ma));
memset(vis,0,sizeof(vis));
memset(dfn,0,sizeof(dfn));
} int main()
{
while(~scanf("%d",&n))
{
int x;
init();
for(int i=1;i<=n;i++)
{
while(scanf("%d",&x)&&x)
ma[i][x]=1;
}
//找强连通分量
tp=p=cnt=0;
for(int i=1;i<=n;i++)
{
if(!dfn[i])
{
tarjan(i);
}
}
fun();
}
return 0;
}
/* 5
2 4 3 0
4 5 0
0
0
1 0 */

POJ1236【图的前连通(缩点)】的更多相关文章

  1. Semiconnected--强连通缩点

    1451: Semiconnected 时间限制: 1 Sec  内存限制: 32 MB 提交: 79  解决: 20 题目描述 For a directed graph G = (V, E), if ...

  2. hdu 4612 Warm up 双连通缩点+树的直径

    首先双连通缩点建立新图(顺带求原图的总的桥数,事实上因为原图是一个强连通图,所以桥就等于缩点后的边) 此时得到的图类似树结构,对于新图求一次直径,也就是最长链. 我们新建的边就一定是连接这条最长链的首 ...

  3. 使用OpenCV查找二值图中最大连通区域

    http://blog.csdn.net/shaoxiaohu1/article/details/40272875 使用OpenCV查找二值图中最大连通区域 标签: OpenCVfindCoutour ...

  4. 边双连通缩点+树dp 2015 ACM Arabella Collegiate Programming Contest的Gym - 100676H

    http://codeforces.com/gym/100676/attachments 题目大意: 有n个城市,有m条路,每条路都有边长,如果某几个城市的路能组成一个环,那么在环中的这些城市就有传送 ...

  5. loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点

    loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...

  6. poj 3352 Road Construction【边双连通求最少加多少条边使图双连通&&缩点】

    Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10141   Accepted: 503 ...

  7. Hdu4005-The war(双连通缩点)

    In the war, the intelligence about the enemy is very important. Now, our troop has mastered the situ ...

  8. POJ 3177 Redundant Paths (边双连通+缩点)

    <题目链接> <转载于 >>>  > 题目大意: 有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新 ...

  9. UVA 10972 RevolC FaeLoN(边-双连通+缩点)

    很好的一道图论题,整整撸了一上午... 题意是给定一个无向图,要求将所有边变为有向边,求最少加入多少条有向边,使得该图强连通?这里先假设一个问题:给定一个无向子图,该子图具有怎样的性质才能使得将其无向 ...

随机推荐

  1. 基于 orange(nginx+openresty) + docker 实现微服务 网关功能

    摘要 基于 orange(nginx+openresty) + docker 实现微服务 网关功能 ;以实现 docker 独立容器 来跑 独立语言独立环境 在 同一个授权下 运行相关组合程序..年初 ...

  2. Python常用的模块

    模块,模块就是封装了特殊功能的代码. 模块分为三种: 自定义模块 第三方模块 内置模块 自定义模块 1.自定义模块 2.模块的导入 python有大量的模块可以使用,再使用之前我们只需要导入模块就可以 ...

  3. 关于颜色(color、background)

    CSS3 HSL colors使用参考指南语法:<length> || <percentage> || <percentage>取值:<length> ...

  4. CentOS 5.5下搭建部署独立SVN服务器全程详解

    SVN服务器有2种运行方式:1.独立服务器 (例如:svn://xxx.com/xxx):2.借助apache   (例如:http://svn.xxx.com/xxx):为了不依赖apache,我选 ...

  5. HTTP的上传文件实例分析

    这个是http文件传输的一种格式,当时不知道这种格式,废弃. HTTP的上传文件实例分析 由于论坛不支持Word写文章发帖. 首先就是附件发送怎么搞,这个必须解决.论坛是php的.我用Chrome类浏 ...

  6. Umbrella Header for Module Bolts does not include header &#39;XXXXXX.h&#39;?

    在我们引入第三方Framwork时.有时会出现如标题的警告提示? 怎样解决? Framework 将在下面文件夹下创建一个Module/,并创建一个module.modulemap文件 waterma ...

  7. 项目Beta冲刺(团队2/7)

    项目Beta冲刺(团队2/7) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标: 完成项目Beta版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 陈宇 ...

  8. Android Menu开源项目整合工程

    本实例整合了关于Android Menu的优秀开源代码,方便有需要用到Menu开源项目的小伙伴使用. 一.整合的项目有: SlidingMenu:https://github.com/jfeinste ...

  9. Django 之 中间件

    一.概念 1.什么是中间件? 官方解释:中间件是用来处理Django的请求和响应的框架级别的钩子.基于全局范围产生影响. 平民解释:中间件是帮助我们在视图函数执行前和执行后做的操作.它本质上就是一个自 ...

  10. Mysql性能优化笔记

    一,索引 1.Innodb索引使用的是B+树 2.尽量简化where条件,比如不要出现 where id + 3 = 5,这无法使用索引 3.索引很大时,可以冗余一列来模拟哈希索引 4.小的表不需要使 ...