题目大意:有向关系体现在电脑可以通过网络单向的传输文件,并规定一旦有电脑存在该文件,那么所有它能传输的电脑就能在第一时间得到这个文件,题目有两个问题,第一个是最少向网络中的几台电脑投放文件,能使得整个图中的电脑都得到文件,第二个问题是要最少再连接几条边,使得任意向图中一点投放文件,其他所有电脑都能得到文件。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<vector>
#define MAX 100+10
using namespace std;
vector<int> gra[MAX], N_gra[MAX];
int dfn[MAX];
int low[MAX];
int stack[MAX];
int scc[MAX];
int on_stack[MAX];
int Time;
int sta_index;
int scc_index;
int n;
int ind[MAX];
int out[MAX];

void Init() {
    memset(ind, 0, sizeof(ind));
    memset(out, 0, sizeof(out));
    memset(dfn, 0, sizeof(dfn));
    memset(low, 0, sizeof(low));
    memset(on_stack, 0, sizeof(on_stack));
    memset(stack, 0, sizeof(stack));
    Time = 0;
    sta_index = 0;
    scc_index = 0;
}

void Tarjan(int u) {
    dfn[u] = low[u] = ++Time;
    stack[sta_index++] = u;
    on_stack[u] = 1;
    for (size_t i = 0; i < gra[u].size(); i++) {
        int v = gra[u][i];
        if (!dfn[v]) {
            Tarjan(v);
            if (low[v] < low[u])
                low[u] = low[v];

        }

        else if (on_stack[v] && dfn[v] < low[u]) {
            low[u] = dfn[v];
        }
    }
    if (low[u] == dfn[u]) {
        int tmp = 0;
        scc_index++;
        while (u != tmp) {
            tmp = stack[--sta_index];
            on_stack[tmp] = 0;
            scc[tmp] = scc_index;
        }
    }
    return;
}

void Find_all_scc() {
    Init();
    for (int i = 1; i <= n; i++) {
        if (!dfn[i]) {
            Tarjan(i);

        }

    }
    //缩点
    for (int i = 1; i <= n; i++) {
        for (size_t j = 0; j < gra[i].size(); j++) {
            int k = gra[i][j];
            if (scc[i] != scc[k]) {
                ind[scc[k]]++;
                out[scc[i]]++;
                N_gra[scc[i]].push_back(scc[k]);
            }

        }

    }

}

int main(void) {

    scanf("%d", &n);
    int t;
    for (size_t i = 0; i < n; i++) {
        gra[i].clear();
        N_gra[i].clear();

    }
    for (int i = 1; i <= n; i++) {
        while (scanf("%d", &t) && t) {
            gra[i].push_back(t);

        }

    }

    Find_all_scc();
    if (scc_index == 1) {
        printf("1\n0\n");
        return 0;

    }
    int ans1 = 0, ans2 = 0;
    for (int i = 1; i <= scc_index; i++) {
        if (ind[i] == 0)
            ans1++;
        if (out[i] == 0)
            ans2++;
    }
    printf("%d\n%d\n", ans1, max(ans1, ans2));
    return 0;
}

POJ1236【Tarjan+缩点】的更多相关文章

  1. POJ1236:Network of Schools (思维+Tarjan缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24880   Accepted: 99 ...

  2. hihoCoder 1185 连通性·三(Tarjan缩点+暴力DFS)

    #1185 : 连通性·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 暑假到了!!小Hi和小Ho为了体验生活,来到了住在大草原的约翰家.今天一大早,约翰因为有事要出 ...

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

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

  4. King's Quest —— POJ1904(ZOJ2470)Tarjan缩点

    King's Quest Time Limit: 15000MS Memory Limit: 65536K Case Time Limit: 2000MS Description Once upon ...

  5. 【BZOJ-2438】杀人游戏 Tarjan + 缩点 + 概率

    2438: [中山市选2011]杀人游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1638  Solved: 433[Submit][Statu ...

  6. 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP

    1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 318[Submit][Stat ...

  7. 【BZOJ-1797】Mincut 最小割 最大流 + Tarjan + 缩点

    1797: [Ahoi2009]Mincut 最小割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1685  Solved: 724[Submit] ...

  8. BZOJ 1051 受欢迎的牛(Tarjan缩点)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4573  Solved: 2428 [Submit][S ...

  9. HDU4612+Tarjan缩点+BFS求树的直径

    tarjan+缩点+树的直径题意:给出n个点和m条边的图,存在重边,问加一条边以后,剩下的桥的数量最少为多少.先tarjan缩点,再在这棵树上求直径.加的边即是连接这条直径的两端. /* tarjan ...

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

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

随机推荐

  1. 关闭NetworkManager的作用

    author: headsen  chen date: 2017-11-21  13:34:23 个人原创 重启网卡后,会造成网卡失效,报错如下: Bringing up interface eth0 ...

  2. Objective-C 中的 BOOL

    之前开发了一个针对单个数据模型,自动建表.增删改查等操作的 ORM 库,后边在 iPhone 5c 上使用时,出现了 crash 的情况. 该项目在 Github 开源,项目地址为SXJDatabas ...

  3. 你学会UI设计了吗?

    你学会UI设计了吗? UI设计师如何前驱? 关于产品 作为一个UI设计师,我们还在干巴巴的等着产品经理甚至交互提供的需求和原型再开始动手吗?这样被动的工作是永远无法提升自己的,当然你也永远只能拿到几千 ...

  4. 1.Java关键字和保留字

    关键字和保留字 http://www.cnblogs.com/wwxbi/p/4292170.html 访问控制 private protected public 类,方法和变量修饰符 abstrac ...

  5. 【原创】开启PowerShell远程管理

    非域网络,开启PowerShell远程管理,命令如下: 以下操作,PS命令窗口,必须都以管理员省份执行. Step 1: 机器A和B,分别开启PowerShell远程管理服务A = 192.168.3 ...

  6. 1. 初识 Lucene

    在学习Lucene之前呢,我们当然首先要了解下什么是Lucene. 0x01 什么是Lucene ? Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供. Lu ...

  7. KVM之八:快照创建、恢复与删除

    kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像,zlib磁盘压缩,AES加密等.要使用镜像功能,磁盘格式必须为qcow2.下面开始kvm虚拟机 ...

  8. c语音-第零次作业

    1.你认为大学的学习生活.同学关系.师生应该是怎样? 我认为大学学习应该以自我学习为主,由以往的被动学习改为主动学习,探索新世界,除学习专业知识外对自身欠缺的地方也应该加以补足:同学之间要互相帮助,更 ...

  9. TRY

  10. tornado 采用 epoll 代理构建高并发网络模型

    1 阻塞和非阻塞  对于阻塞和非阻塞,网上有一个很形象的比喻,就是说好比你在等快递,阻塞模式就是快递如果不到,你就不能做其他事情.非阻塞模式就是在这段时间里面,你可以做其他事情,比如上网.打游戏.睡觉 ...