A - Network of Schools - poj 1236(求连通分量)
#include<string.h>
#include<stack>
#include<algorithm>
using namespace std;
const int MAXN = 105;
///邻接表变量
struct Edge{int v, next;}e[MAXN*MAXN];
int Head[MAXN], cnt;
void AddEdge(int u, int v)
{
    e[cnt].v = v;
    e[cnt].next = Head[u];
    Head[u] = cnt++;
}
///tarjan算法变量
int sta[MAXN], inStack[MAXN], top;
int dfn[MAXN], low[MAXN], index;
int belong[MAXN], bnt;
void tarjan(int k)
{
    int j;
dfn[k] = low[k] = ++index;
    inStack[k] = true;
    sta[++top] = k;
for(j=Head[k]; j!=-1; j=e[j].next)
    {
        int v = e[j].v;
        if( !dfn[v] )
        {
            tarjan(v);
            low[k] = min(low[k], low[v]);
        }
        else if(inStack[v])
            low[k] = min(low[k], dfn[v]);
    }
if(dfn[k] == low[k])
    {
        ++bnt;
        do
        {
            j = sta[top--];
            inStack[j] = false;
            belong[j] = bnt;
        }
        while(k != j);
    }
}
void InIt(int N)
{
    cnt = bnt = index = 0;
    top = 0;
for(int i=1; i<=N; i++)
    {
        Head[i] = -1;
        dfn[i] = false;
    }
}
int main()
{
    int N;
while(scanf("%d", &N) != EOF)
    {
        int i, j, u, v;
InIt(N);
for(i=1; i<=N; i++)
        {
            while(scanf("%d", &v), v)
                AddEdge(i, v);
        }
for(i=1; i<=N; i++)if(!dfn[i])
            tarjan(i);
int r[MAXN]={0}, c[MAXN]={0}, rn=0, cn=0;
for(i=1; i<=N; i++)
        for(j=Head[i]; j!=-1; j=e[j].next)
        {
            u = belong[i], v = belong[e[j].v];
            if(u != v)
            {
                c[u]++;
                r[v]++;
            }
        }
for(i=1; i<=bnt; i++)
        {
            if(r[i] == 0)rn++;
            if(c[i] == 0)cn++;
        }
if(bnt == 1)
            printf("1\n0\n");
        else
            printf("%d\n%d\n", rn, max(rn, cn));
    }
return 0;
}
A - Network of Schools - poj 1236(求连通分量)的更多相关文章
- Network of Schools POJ - 1236(强连通+缩点)
		
题目大意 有N个学校,这些学校之间用一些单向边连接,若学校A连接到学校B(B不一定连接到A),那么给学校A发一套软件,则学校B也可以获得.现给出学校之间的连接关系,求出至少给几个学校分发软件,才能使得 ...
 - Network of Schools  POJ - 1236 (强联通)
		
一些学校连接到了一个计算机网络.网络中的学校间有如下约定:每个学校维护一个列表,当该学校收到软件或信息后将会转发给列表中的所有学校(也就是接收方列表).需要注意的是如果B学校在A学校的接收方列表中,A ...
 - Network of Schools POJ - 1236 有向强连通图
		
//题意://给你n个学校,其中每一个学校都和一些其他学校有交流,但是这些边都是单向的.你至少需要给几个学校//传递消息可以使全部学校都收到消息,第二问你最少添加几条边可以使它变成一个强连通图//题解 ...
 - poj 1236 Network of Schools【强连通求孤立强连通分支个数&&最少加多少条边使其成为强连通图】
		
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13800 Accepted: 55 ...
 - poj 2524 求连通分量(并查集模板题)
		
求连通分量 Sample Input 10 91 21 31 41 51 61 71 81 91 1010 42 34 54 85 80 0Sample Output Case 1: 1Case 2: ...
 - POJ 1236 Network of Schools(tarjan求强连通分量+思维)
		
题目链接:http://poj.org/problem?id=1236 题目大意: 给你一个网络(有向图),有两个任务: ①求出至少同时需要几份副本可以使得整个网络都获得副本 ②至少添加多少信息表(有 ...
 - poj1236 Network of Schools ,有向图求强连通分量(Tarjan算法),缩点
		
题目链接: 点击打开链接 题意: 给定一个有向图,求: 1) 至少要选几个顶点.才干做到从这些顶点出发,能够到达所有顶点 2) 至少要加多少条边.才干使得从不论什么一个顶点出发,都能到达所有顶点 ...
 - How Many Tables(POJ 1213 求连通分量)
		
How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
 - POJ 1236 Network Of Schools (强连通分量缩点求出度为0的和入度为0的分量个数)
		
Network of Schools A number of schools are connected to a computer network. Agreements have been dev ...
 
随机推荐
- C#txt文件读写基本操作
			
string strFileName=@"C:\Users\Administrator\Desktop\记事2.txt"; //判断是否存在 if (File.Exists(str ...
 - 阿里云linux的nginx下面配置多站点
			
假设有服务器ip为 114.214.85.35 域名1为 www.jieshendada.cn 域名2为 www.jieshenxiaoxiao.cn 1.首先打开nginx域名配置文件存放目录:/ ...
 - Android时间戳转换为标准Datetime(yyyy-MM-dd hh:mm:ss)格式
			
下列函数为实现过程,已经测试通过. /// <summary> /// Android时间戳转换为标准Datetime /// </summary> /// <param ...
 - 还是把一个课程设计作为第一篇文章吧——学生学籍管理系统(C语言)
			
#include <stdio.h> #include<stdlib.h> #include<string.h> typedef struct student { ...
 - Spring静态属性注入
			
今天遇到一个工具类,需要静态注入一个属性,方法如下: 第一步:属性的set和get方法不要加static package cn.com.chinalife.ebusiness.common.util; ...
 - 剖析c++(三) 类对象在内存中的布局
			
基本规则: 1.各data member的自然边界为其字节大小(char为1,short为2,int为4),并按照各自的自然边界对齐: 2.整个object的总自然边界为最大data memeber的 ...
 - hdu1025 最长不下降子序列nlogn算法
			
C - DP Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bit I ...
 - jquery读取后台代码
			
前台代码: <script type="text/javascript"> $(function () { $("#btn") ...
 - SQL Server 触发器(转)
			
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...
 - python ciscolib模块
			
python的第三方模块ciscolib可以登录交换机执行相关命令 ciscolib下载地址: https://github.com/nickpegg/ciscolib 常见用法如下: switch ...