题意:一个有向图。第一问:最少给几个点信息能让所有点都收到信息。第二问:最少加几个边能实现在任意点放信息就能传遍所有点

思路:把所有强连通分量缩成一点,然后判断各个点的入度和出度

tarjan算法:问问神奇海螺啥是tarjan

代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<queue>
#include<cmath>
#include<string>
#include<map>
#include<stack>
#include<set>
#include<vector>
#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f3f
const int N=110;
const int MOD=1000;
using namespace std;
int n,index,scc_cnt; //scc_cnt记录SCC
int dfn[N],low[N],sccno[N],in[N],out[N];
vector<int> g[N];
stack<int> s;
void tarjan(int x){
int i;
dfn[x]=low[x]=++index;
s.push(x);
for(i=0;i<g[x].size();i++){
int v=g[x][i];
if(!dfn[v]){ //未走过
tarjan(v);
low[x]=min(low[x],low[v]);
}
else if(!sccno[v]){ //走过且在栈中
low[x]=min(low[x],dfn[v]);
}
}
if(dfn[x]==low[x]){
scc_cnt++; //增加一个大点
int a;
while(1){ //x及以后全部出栈
a=s.top();
s.pop();
sccno[a]=scc_cnt;
if(a==x) break;
}
}
}
void done(){
index=scc_cnt=0;
memset(dfn,0,sizeof(dfn));
memset(sccno,0,sizeof(sccno));
for(int i=0;i<n;i++){
if(!dfn[i]) tarjan(i);
}
}
int main(){
int t;
while(~scanf("%d",&n) && n){
for(int i=0;i<n;i++) g[i].clear();
for(int u=0;u<n;u++){
while(~scanf("%d",&t) && t){
t--;
g[u].push_back(t);
}
}
done();
int ans1,ans2;
for(int i=1;i<=scc_cnt;i++){
in[i]=out[i]=0; //入度出度初始化为无
}
for(int i=0;i<n;i++){
for(int j=0;j<g[i].size();j++){
int v=g[i][j];
if(sccno[i]!=sccno[v]){
in[sccno[v]]=out[sccno[i]]=1; //一个有入度一个有出度
}
}
}
ans1=ans2=0;
for(int i=1;i<=scc_cnt;i++){
if(in[i]==0) ans1++;
if(out[i]==0) ans2++;
}
if(scc_cnt==1) printf("1\n0\n");
else printf("%d\n%d\n",ans1,max(ans1,ans2));
}
return 0;
}

POJ 1236 Network of Schools(tarjan)题解的更多相关文章

  1. Poj 1236 Network of Schools (Tarjan)

    题目链接: Poj 1236 Network of Schools 题目描述: 有n个学校,学校之间有一些单向的用来发射无线电的线路,当一个学校得到网络可以通过线路向其他学校传输网络,1:至少分配几个 ...

  2. POJ 1236 Network of Schools (Tarjan + 缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12240   Accepted: 48 ...

  3. POJ 1236 Network of Schools Tarjan缩点

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22729   Accepted: 89 ...

  4. POJ 1236 Network of Schools(强连通 Tarjan+缩点)

    POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意:  给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...

  5. POJ 1236 Network of Schools(强连通分量)

    POJ 1236 Network of Schools 题目链接 题意:题意本质上就是,给定一个有向图,问两个问题 1.从哪几个顶点出发,能走全全部点 2.最少连几条边,使得图强连通 思路: #inc ...

  6. [tarjan] poj 1236 Network of Schools

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

  7. poj 1236 Network of Schools(又是强连通分量+缩点)

    http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  8. poj 1236 Network of Schools(连通图入度,出度为0)

    http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  9. POJ 1236 Network of Schools(Tarjan缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16806   Accepted: 66 ...

  10. poj 1236 Network of Schools(tarjan+缩点)

    Network of Schools Description A number of schools are connected to a computer network. Agreements h ...

随机推荐

  1. Joint Stacks---hdu5818(栈模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5818  有3个操作pop,push,merge A B; 引入一个新的栈C,每次合并的时候就把A和B合 ...

  2. River Crossing---河南省第六届大学生程序设计竞赛

    题目描述 Afandi is herding N sheep across the expanses of grassland  when he finds himself blocked by a ...

  3. SP11469 SUBSET-Balanced Cow Subsets meet-in-the-middle+状压

    正解:折半搜索 解题报告: 传送门! 这题我开始看到的时候贼开心地就把这题的代码直接粘过来辣 然后就T辣,,,仔细思考一下,为什么呢? 因为会枚举到很多相同的状态 举个eg 20 1 1 1 1 1 ...

  4. python中url解析 or url的base64编码

    目录 from urllib.parse import urlparse, quote, unquote, urlencode1.解析url的组成成分:urlparse(url)2.url的base6 ...

  5. QQ公众号?是的,你没看错!

    微信公众平台培育了800多万的微信公众号,自身也通过微信游戏.广告分销等找到了一些增值盈利模式.作为同门大师兄,qq也在11月份推出了QQ公众号,第一个手机QQ上的“生活服务号”——YTO圆通速递上线 ...

  6. Spark SQL入门用法与原理分析

    Spark SQL是为了让开发人员摆脱自己编写RDD等原生Spark代码而产生的,开发人员只需要写一句SQL语句或者调用API,就能生成(翻译成)对应的SparkJob代码并去执行,开发变得更简洁 注 ...

  7. git 生成patch 和打入patch

    转载:https://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用gi ...

  8. 【Cocos2dx 3.3 Lua】定时器事件

    Cocos2dx 3.x Lua 中使用定时器有两种方式: (1)self:scheduleUpdateWithPriorityLua(update, priority) > 参数一:刷新函数 ...

  9. WebService之Axis2 (3):使用services.xml文件发布WebService

    用Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中.这 ...

  10. Keepalived+HAproxy实现高可用负载均衡

    总概:       Keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态, ...