POJ1236学校网络——tarjan
题目:http://poj.org/problem?id=1236
Tarjan+缩点。温习一下Tarjan的写法。
1.在缩点后的TAG中,有几个联通块等价于有几个入度为0的点!
2.把它们都联通相当于给每个入度为0的点都连一条入边,给每个出度为0的点都连一条出边,所以二者取max即可。
* 有向图是强联通分量的充要条件是没有入度为0的点也没有出度为0的点。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
int n,head[N],rd[N],cd[N],dfn[N],low[N],xnt,cnt,tim;
int stack[N],top,r,c,col[N],ans,rrd[N];
bool in[N];
struct Edge{
int next,from,to;
Edge(int n=,int f=,int t=):next(n),from(f),to(t) {}
}edge[N*N];
void tarjan(int cur)
{
dfn[cur]=low[cur]=++tim;
stack[++top]=cur;in[cur]=;
for(int i=head[cur],v;i;i=edge[i].next)
{
if(in[v=edge[i].to])
low[cur]=min(low[cur],dfn[v]);
else if(!dfn[v])tarjan(v),low[cur]=min(low[cur],low[v]);
}
if(dfn[cur]==low[cur])
{
cnt++;
while(cur!=stack[top])in[stack[top]]=,col[stack[top--]]=cnt;
in[stack[top]]=;col[stack[top--]]=cnt;
}
}
int main()
{
scanf("%d",&n);int x;
for(int i=;i<=n;i++)
while()
{
scanf("%d",&x);if(!x)break;
edge[++xnt]=Edge(head[i],i,x);head[i]=xnt;
}
for(int i=;i<=n;i++)
if(!dfn[i])tarjan(i);//!dfn[i]
for(int i=,v,u;i<=xnt;i++)
if(col[u=edge[i].from]!=col[v=edge[i].to])rd[col[v]]++,cd[col[u]]++;
for(int i=;i<=cnt;i++)
{
if(!rd[i])r++;if(!cd[i])c++;
}
if(cnt==)//
{
printf("1\n0");return ;
}
printf("%d\n%d",r,max(r,c));
return ;
}
POJ1236学校网络——tarjan的更多相关文章
- poj1236学校网络——连通块
题目:http://poj.org/problem?id=1236 通过传输文件的特点可以看出要先求强联通分量,缩点: 问题1:即缩点后入度为0的点,从它们开始传文件可以传给所有学校: 问题2:对于所 ...
- [vijos P1595] 学校网络
有生以来做的第二道IOI题目居然也是96'的,又是一道比我还老的题目. 纯属复习或者说再学一遍Tarjan算法,本题的主要算法就是Tarjan+缩点,对于两个子问题的答案,根据解题:强连通缩点为拓扑图 ...
- 割点与桥,强连通分量,点双,边双[poj_1236]学校网络
割点与桥 题目描述 给定一张无向图G(V,E),你需要找出所有的割点与桥. 输入 第一行给出两个正整数V,E. 接下来E行每行两个正整数x,y,表示有一条连接x,y的边. 输出 输出共2行,第一行输出 ...
- VijosP1595:学校网络(有向图变强连通图)
描述 一些学校的校园网连接在一个计算机网络上.学校之间存在软件支援协议.每个学校都有它应支援的学校名单(学校a支援学校b,并不表示学校b一定支援学校a).当某校获得一个新软件时,无论是直接得到的还是从 ...
- tyvj 1153 间谍网络 tarjan有向图强连通
P1153 - 间谍网络 From ForeverBell Normal (OI)总时限:13s 内存限制:128MB 代码长度限制:64KB 描述 Description 由于外国 ...
- POJ 1236 学校网络间的强连通
题目大意: N个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输.问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件.问题2:至少需要添加几条 ...
- 间谍网络——tarjan求SCC
洛谷传送门 看着这道题给人感觉就是tarjan求SCC,然而还得判断是否能控制全部间谍,这就得先从可以贿赂的点dfs一遍. 如果没有全部被标记了,就输出NO,再从没被标记的点里找最小的标号. 如果全被 ...
- Luogu 2812 校园网络 - Tarjan
Description 给出一个有向图, 要求出至少从哪几个点出发, 能不漏地经过所有节点. 再求出至少加几条边, 才能使图变成一个强联通分量 Solution 求出所有强联通分量, 形成一个有向无环 ...
- 洛谷 1262 间谍网络 Tarjan 图论
洛谷 1262 图论 tarjan 并不感觉把这道题目放在图的遍历中很合适,虽然思路比较简单但是代码还是有点多的,, 将可收买的间谍的cost值设为它的价格,不可购买的设为inf,按照控制关系连图,T ...
随机推荐
- Centos75下samba搭建配置
工作中,很经常需要把Linux服务器上的文件共享到windows上面,这时候需要在Linux服务器上安装samba套件. samba服务很好的实现了windows和linux之间的文件共享. 下面配置 ...
- Vue学习笔记之Vue的对象单体模式
0x00 对象的单体模式 为了解决箭头函数this指向的问题 推出来一种写法 对象的单体模式 var person = { name:'小马哥', age:12, fav(){ console.log ...
- 20145319 《网络渗透》Adobe阅读器渗透攻击
20145319 <网络渗透>Adobe阅读器渗透攻击 一 实验内容 初步掌握平台matesploit的使用 有了初步完成渗透操作的思路 本次攻击对象:windows xp sp3 Ad ...
- 初识PHP(四)PDO对象配置于使用
一.PDO的概念 PDO其实就是一个数据库的抽象层,使用PDO编程可以方便的在之后的实际运营中随时更改数据库而不用变更源代码.PDO的位置如下图所示: 二.PDO的开启 PDO需要使用php 5.1 ...
- ssh-copy-id使用非默认22端口
ssh-copy-id使用及非默认22端口时报错 ssh-copy-id使用介绍 说明:ssh-copy-id命令可以把本地的ssh公钥文件安装到远程主机对应的账户下. 功能:ssh-copy-id ...
- SpringMVC 原理和流程
请求到来时,第一个接受这个请求的前端控制器叫DispatcherServlet(这个需要在web.xml中配置),后端控制器叫Controller. 简化版流程: 1.spring mvc将所有的请求 ...
- UOJ #164 【清华集训2015】 V
题目链接:V 这道题由于是单点询问,所以异常好写. 注意到每种修改操作都可以用一个标记\((a,b)\)表示.标记\((a,b)\)的意义就是\(x= \max\{x+a,b\}\) 同时这种标记也是 ...
- c++ 容器排序
#include <algorithm> #include <functional> #include <array> #include <iostream& ...
- [Checking for libstdc++-4.4.4-13.el6-i686; Not found. Failed] 的解决。
单纯 yum install libstdc++-4.4.4.i686 是不行的. 应该安装 yum install libstdc++-devel.i686 顺带就能装上需要的lib 真够变态的. ...
- C# Lock关键字
lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁. lock语句根本使用的就是Monitor.Enter和Monitor.Exit,也就是说lock(this) ...