kuangbin连通图专题,Network of Schools (POJ - 1236,tarjan算法求缩点+缩点的入度与出度的运用)

2023-05-16

kuangbin
题意是有N个学校…每个学校可能向几个学校进行数据传输(单向的)…问…至少需要把一个文件给几个学校可以使给的N个学校都收到文件…再问在加几个通信线路可以使各个学校之间都能直接或间接的传递文件…
一个强连通分量里的点肯定能互相传输…所以先用Tarjan缩点…如果一个点没有入度…那么则说明其他所有点无论如何都到不了这个点…如果要将文件传给所有点…那么首先没有入度的点必须要直接发文件…再想除了这些点…那么其他的点肯定有入度了…那么当把所有没有入度的点给选了之后…其他有入度的点必然能到达…所以第一问就是没有入度.点的个数…但要注意.如果都有入度…那么也是需要1个点的…因为至少要把文件给发下去吧…
第二问…所有点都能互相到达…那么没有出度的点肯定要加出度边…没有入度的点肯定要加入度边…如果入度和出度点正好相等那么就两两配对加~~加的边正好就是没有入度或者说没有出度点的个数…如果没有出度边大于没有入度边…那么先两两配对…然后多的出度点再和一般的点来做边…那加的边正好是出度点的个数…反之如果没有入度的点多于没有出度的点…那么加的边数就是没有入度点的个数…所以第二问的答案就是没有入度的点和没有出度的点的最大值…
一个要特别注意的…就是用Tarjan缩点后只剩一个点的情况…要特判输出 1 0.

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std;
const int maxn=105;
int dfsn[maxn],low[maxn],tot=0;
stack<int> st;
int ins[maxn],in[maxn],out[maxn],id[maxn];
int cnt=0;
vector<int> g[maxn];
void tarjan(int u)
{
    dfsn[u]=low[u]=++tot;
    st.push(u);
    ins[u]=1;
    for(int i=0;i<g[u].size();i++){
        int v=g[u][i];
        if(!dfsn[v]){
            tarjan(v);
         low[u]=min(low[u],low[v]);
        }
        else
        if(ins[v]){
            low[u]=min(low[u],dfsn[v]);
        }
    }
    if(dfsn[u]==low[u]){
        cnt++;
        while(1){
            int pre=st.top();
            st.pop();
            ins[pre]=0;
            id[pre]=cnt;
            if(pre==u)break;
        }
    }

}
int main()
{
    int n;
    while(!st.empty()){
        st.pop();
    }
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        g[i].clear();
    }
    for(int i=1;i<=n;i++){
        int x;
       while(scanf("%d",&x)&&x!=0){
        g[i].push_back(x);
       }
    }
    memset(dfsn,0,sizeof(dfsn));
    memset(ins,0,sizeof(ins));
    for(int i=1;i<=n;i++){
        if(!dfsn[i]){
            tarjan(i);
        }
    }
    if(cnt==1){
        printf("1\n0\n");
    }
    else{
    memset(in,0,sizeof(in));
    memset(out,0,sizeof(out));
    for(int i=1;i<=n;i++){
        for(int j=0;j<g[i].size();j++){
            int u=i,v=g[i][j];
            if(id[u]!=id[v]){
                out[id[u]]++;
                in[id[v]]++;
            }
        }
    }
    int ans1=0,ans2=0;
    for(int i=1;i<=cnt;i++){
        if(in[i]==0){
            ans1++;
        }
    }
    printf("%d\n",ans1);
    for(int i=1;i<=cnt;i++){
        if(out[i]==0){
            ans2++;
        }
    }
    printf("%d\n",max(ans1,ans2));
    }
    return 0;
}

   




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kuangbin连通图专题,Network of Schools (POJ - 1236,tarjan算法求缩点+缩点的入度与出度的运用) 的相关文章

  • Python学习:numpy库 数据量太大出现Memory Error问题的解决方法汇总

    python处理大训练集过程中经常会遇到的Memory Error问题 这里看了几位博主的解决方案进行了整理 xff0c 感谢分享 xff01 http chenqx github io 2014 10 29 Python fastest
  • 学习C++有没有必要学习boost库?

    学习C 43 43 有没有必要学习boost库 xff1f https www zhihu com question 39817943 学习 C 43 43 Boost 之前 xff0c 是否需要对 STL 很熟悉 xff1f https
  • char型指针数组和数组指针(char *a[]和char (*a)[])赋值方法

    char型指针数组和数组指针赋值方法 指针数组赋值数组指针赋值 指针数组赋值 指针数组是指所定义数组的每个数组元素都是一个相应数据类型的指针 xff0c 开设空间的操作可以应用循环语句进行 xff0c 例如 xff1a char p 10
  • 基于stm32的自定义通信协议-模拟串行通讯

    目录 一 背景 二 方案设计 三 课程作业实施 四 测试结果 五 部分代码 xff08 完整代码可主页联系作者 xff09 一 背景 题目 xff1a 通过数字通道进行两个计算机系统的通讯目标 xff1a 设计 实现一个用于数字通道串行通讯
  • 视觉SLAM学习笔记——目录与参考

    写在前面 xff1a 从18年开始接触自主机器人定位建图 xff0c 8月打开高翔的 视觉SLAM十四讲 以及视频教程正式进行系统学习 xff0c 现在也基本能看懂那些State of the art的paper与算法 但感觉自己对于一些细
  • 【VINS论文翻译】VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator

    回到目录 写在前面 港科大的VINS Mono作为目前state of the art的开源VIO项目 xff0c 是研究视觉与IMU紧耦合的必读算法 xff0c 网上的论文解读与代码实现也非常丰富 xff08 感谢 xff01 xff09
  • linux--进程控制2

    在进程控制的章节我们讲解了我们的进程创建 xff0c 这章节对进程控制进行补充 xff0c 进程终止 在我们创建一个进程之后我们避免不了我们去终止我们的进程 终止场景 正常退出 xff0c 结果符合我们的预期正常退出 xff0c 结果不符合
  • VINS-Mono论文学习与代码解读——目录与参考

    前言 港科大的VINS Mono作为目前state of the art的开源VIO项目 xff0c 是研究视觉与IMU融合的必读算法 xff0c 网上的论文解读与代码实现也非常丰富 xff08 感谢 xff01 xff09 为更好地进行学
  • VINS-Mono代码解读——视觉跟踪 feature_trackers

    前言 本文主要介绍VINS的视觉处理前端的视觉跟踪模块 xff08 feature trackers xff09 论文第四章A节 xff08 IV MEASUREMENT PREPROCESSING A Vision Processing
  • 视觉SLAM中的数学——解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解

    前言 本博客主要介绍在SLAM问题中常常出现的一些线性代数相关的知识 xff0c 重点是如何采用矩阵分解的方法 xff0c 求解线性方程组AX 61 B 主要参考了 计算机视觉 算法与应用 附录A以及Eigen库的方法 本博客可能不会对分解
  • pycharm 每次打开文件都要配置解释器的解决方案

    今天在打开pycharm的时候 xff0c 又发现那个解释器不能用了 xff0c 然后在网上找解决方案 xff0c 有的说是用defautsetting解决 xff0c 然是我没有找到那个default setting 在哪里 233333
  • PS多边形套锁工具在框选区的时候一按shift键PS

    微软输入法更新导致的BUG xff0c 把微软拼音输入法设置中兼容性里使用旧版就解决了 步骤 xff1a 右键输入法 xff0c 选择设置 xff0c 选择常规 xff0c 然后拖到最下面 xff0c 勾上兼容性就可以 xff0c 如下图
  • N卡怎么修改录屏文件保存位置

    N卡的视频录制非常好用 xff0c 但是有时候找不到保存位置在哪里 xff0c 这里转载下文章记录下 xff0c 方便后续查看 首先告诉你默认位置 我的电脑下的 34 视频 34 文件夹 xff08 有的电脑里叫video xff09 如果
  • 常见的设计模式

    目录 工厂模式单例模式观察者模式策略模式代理模式装饰模式 工厂模式 这个模式有三个对象 xff1a 工厂 用户 产品 xff1b 这么说可能还有点抽象 xff0c 说具体点 xff0c 就是当我们在代码中需要生成一个类实例时 xff0c 不
  • C# 的静态构造函数和BeforeFieldInit含义

    1 静态初始化函数 xff1a 静态初始化函数 xff0c C 语法可以保证在一个程序中只调用一次 xff0c 但是会去掉默认的beforefieldinit 标记 xff08 C 默认会加 xff09 xff0c 会导致加载时机的变化 x
  • Unity万向锁

    结论 xff1a 当第二轴旋转 90 时会产生万向锁 xff0c 万向锁只发生在程序中 xff0c 现实世界不会发生 发生万向锁的底层原因是由于程序中会指定旋转顺序 xff0c 且前后顺序为父子包含关系 旋转顺序 xff1a 因为同样一组数
  • python脚本与shell脚本的相互调用

    python脚本与shell脚本的相互调用 python脚本调用shell脚本 xff1a 存在的shell脚本 xff08 test sh sh xff09 xff1a span class token comment bin csh s
  • 自动实现一个minishell更新(增加重定向功能)

    增加重定向功能 1 include lt stdio h gt 2 include lt unistd h gt 3 include lt stdlib h gt 4 include lt string h gt 5 include lt
  • linux sh 运行csh类型脚本报错

    初入linux xff0c 脚本用的是csh版本 xff0c 在尝试的过程中 xff0c 突然发现按照csh的语法写的指令 xff0c 运行不了 xff0c 例如 1 sh xff1a span class token function s
  • QT creator导入现有工程

    QT creator导入现有工程 如果从gitlib或者其他代码库下载了一些源文件 xff0c 用QT creator打开步骤如下 xff1a 点击 菜单栏的 File gt New File or Project点击 Import Pro

随机推荐

  • 腾讯测试开发面试题

    唉 xff0c 今天面试腾讯的测试开发工程师 xff0c 脸被打肿了 xff0c 下来查阅资料 xff0c 把一道面试题讲一讲吧 xff0c 题目是 xff1a O N 求一个数字串能整除3的连续子串的个数 xff0c 前缀和数组 43 对
  • bat命令调用rar进行文件夹压缩

    64 echo off set 34 ymd 61 date 0 4 date 5 2 date 8 2 date 11 2 date 14 2 34 rem ymd 就是当前的时间 例如20181022 34 C Program File
  • vbs执行相应的bat文件

    set ws 61 createobject 34 wscript shell 34 rem 新建一个脚本对象 do rem do loop 执行循环 ws run 34 C Users Administrator Desktop rar
  • 思岚科技RPlidar A3激光雷达ROS源码详解

    思岚科技RPlidar A3激光雷达ROS源码详解 使用 RPLIDARD 的 SDK 其实重点在于看懂client cpp和node cpp两个sample代码 xff0c 因此在这里我们讲从这里入手学习 RPLIDAR A3 的SDK
  • gcc和makefile用法总结(建议收藏)

    文章目录 64 toc 1 用GCC制作静态链接库静态链接库的创建静态链接库的使用 2 用GCC制作动态链接库动态链接库的创建动态链接库的使用 3 GCC找不到库文件怎么办 xff1f GCC生成可执行文件时找不到库文件GCC运行可执行文件
  • linux---基础IO

    在标准库中我们学习了printf xff0c fprintf xff0c sprintf xff0c snprintf等等相关的函数 xff0c 接下来是我们的系统I O调用接口 open includ e lt sys types h g
  • HDU-2121(朱刘算法优化版+虚根处理无根树形图)

    hdu2121 span class token macro property span class token directive keyword include span span class token string lt bits
  • #10091. 「一本通 3.5 例 1」受欢迎的牛(强联通+度数结论)

    libreoj10091 题解 xff1a 首先简化一下 xff0c 若欢迎关系图是一个DAG 有向无环图 xff0c 则只要统计每个点的出度 xff0c 出度为0的点即为受所有牛欢迎的点且只有唯一一个 xff0c 因为若存在两个以上出度为
  • https://ac.nowcoder.com/acm/problem/13947(牛客网)

    Contest xff1a 链接 xff1a https ac nowcoder com acm problem 13947 来源 xff1a 牛客网 n支队伍一共参加了三场比赛 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中
  • https://ac.nowcoder.com/acm/problem/14136(牛客网 监视任务)

    题目链接 xff1a 题解 xff1a 本题我们不能一上来就用树状数组来统计每一位的贡献 xff0c 我们需要先对区间进行一个排序 xff0c 先按照区间的右端点由小到大排序 xff0c 再按照区间的左端点从小到大排序 xff0c 再按照区
  • https://ac.nowcoder.com/acm/problem/14269(Sum 牛客网)

    位运算 43 组合数学 43 树状数组 xff1a 题解 xff1a 我们如果直接计算操作2的话会很困难 xff0c 我们可以直接考虑一个数的二进制位对答案做出的贡献 xff0c 显然二进制位为0时就不会有任何贡献 xff0c 当我们知道所
  • 异或的路径(牛客网)

    异或路径 43 位运算 43 考虑贡献 题解 xff1a 我们要求所有点对构成的所有路径的异或权值总和 xff0c 肯定不能暴力 xff0c 我们可以知道 xff0c 先搞一个数组d i 表示i节点到根节点1的路径上边权异或和 xff0c
  • TCP为什么采用三次握手而不是两次握手

    希仁版 计算机网络 中的例子是这样的 xff0c 已失效的连接请求报文段 的产生在这样一种情况下 xff1a client发出的第一个连接请求报文段并没有丢失 xff0c 而是在某个网络结点长时间的滞留了 xff0c 以致延误到连接释放以后
  • linux生成可执行文件的命令

    linux生成带调试的可执行文件命令行 xff1a g span class token operator 43 43 span span class token operator span g main span class token
  • git rebase origin/develop

    1 进行git rebase origin develop之前需要进行 lt git add gt lt git commit gt 操作先将修改给提交到暂存区 2 执行git rebase origin develop时候有冲突的话需要自
  • linux---文件描述符和重定向

    文件描述符 进程就是通过struct file结构体来描述打开的文件 xff0c 使用struct file fd array 来存储我们的文件 那什么是文件描述符呢 xff1f 什么是文件描述符 xff1a 文件描述符就是struct f
  • git合并多个commit

    git合并多个commit
  • 深度学习资料

    深度学习资料
  • cmake总结

    cmake 用CMakeList txt产生makefile xff0c make 使用makefile编译可执行程序
  • kuangbin连通图专题,Network of Schools (POJ - 1236,tarjan算法求缩点+缩点的入度与出度的运用)

    kuangbin 题意是有N个学校 每个学校可能向几个学校进行数据传输 xff08 单向的 xff09 问 至少需要把一个文件给几个学校可以使给的N个学校都收到文件 再问在加几个通信线路可以使各个学校之间都能直接或间接的传递文件 一个强连通