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

Tarjan算法-求强连通分量入门 Tarjan算法求强连通分量,强连通分量就是有向图(可以是子图)中的任意两点都能互相到达,所以我们可以用Tarjan算法去求出所有的强连通分量,相当于缩点,然后把这些缩点连接起来,就是DAG(有向无环图),DAG一定有一个点是出度为0的,可以尝试画画图。#include <iostream> #include <cstdio> #include <cstring&gt... 阅读详情

POJ 1236 Network of Schools


题意:有一些学校连接到一个计算机网络。这些学校之间达成了一个协议:每个学校维护着一个学校列表,它向学校列表中的学校发布软件。注意,如果学校B 在学校A 的列表中,则A 不一定在B 的列表中。
任务A:计算为使得每个学校都能通过网络收到软件,你至少需要准备多少份软件拷贝。
任务B:考虑一个更长远的任务,想确保给任意一个学校发放一个新的软件拷贝,该软件拷贝能发布到网络中的每个学校。为了达到这个目标,必须在列表中增加新成员。计算需要添加新成员的最小数目。

思路:
给定一张有向图,问
A:最少需要选择几个点,才能访问完所有的点
缩点之后的DAG中,入度为0的点的个数即为答案,因为这些点不能通过其他点访问到。

B:最少添加多少条边,使得原图成为一个强连通分量
1. 先进行强连通缩点,形成一个有向无环图
2. 统计出度为0: outcnt 和入度为0: incnt
3. 如果已经为一个强连通分量,答案为0,否则答案为max(incnt, outcnt)

/*
ID: wuqi9395@126.com
PROG:
LANG: C++
*/
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<fstream>
#include<cstring>
#include<ctype.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF (1<<30)
#define PI acos(-1.0)
#define mem(a, b) memset(a, b, sizeof(a))
#define rep(i, a, n) for (int i = a; i < n; i++)
#define per(i, a, n) for (int i = n - 1; i >= a; i--)
#define eps 1e-6
#define debug puts("===============")
#define pb push_back
#define mkp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
#define POSIN(x,y) (0 <= (x) && (x) < n && 0 <= (y) && (y) < m)
typedef long long ll;
typedef unsigned long long ULL;
const int maxn = 110;
vector<int> g[maxn];
int n, m, dfn[maxn], low[maxn], scc_cnt, dfs_clock, sccno[maxn];
stack<int> s;
void dfs(int u) {
    low[u] = dfn[u] = ++dfs_clock;
    s.push(u);
    for (int i = 0; i < g[u].size(); i++) {
        int v = g[u][i];
        if (!dfn[v]) {
            dfs(v);
            low[u] = min(low[v], low[u]);
        } else if (!sccno[v]) low[u] = min(low[u], dfn[v]);
    }
    if (low[u] == dfn[u]) {
        scc_cnt++;
        while(1) {
            int x = s.top();
            s.pop();
            sccno[x] = scc_cnt;
            if (x == u) break;
        }
    }
}
void find_scc(int n) {
    mem(dfn, 0);
    mem(sccno, 0);
    scc_cnt = dfs_clock = 0;
    for (int i = 1; i <= n; i++) if (!dfn[i]) dfs(i);
}
int in[maxn], out[maxn];
int incnt, outcnt;
int work() {
    for (int u = 1; u <= n; u++) {
        for (int i = 0; i < g[u].size(); i++) {
            int U = sccno[u], V = sccno[g[u][i]];
            if (U != V) out[U]++, in[V]++;
        }
    }
    incnt = outcnt = 0;
    //cout<<scc_cnt<<endl;
    for (int i = 1; i <= scc_cnt; i++) {
        if (!in[i]) incnt++;
        if (!out[i]) outcnt++;
    }
    printf("%d\n", incnt);
    if (scc_cnt == 1) printf("0\n");
    else printf("%d\n", max(incnt, outcnt));
}
int main () {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        int x;
        while(scanf("%d", &x), x) {
            g[i].pb(x);
        }
    }
    find_scc(n);
    work();
    return 0;
}


【华为OD机考真题】- 斗地主之顺子(B卷-200分)(Java版) 🔔本文收录于「最新最全华为OD机试真题(Java版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!! 🚫提醒:拒绝一切代考/替考,违法必究!专栏所写题库均精心搜集于互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验所撰,欢迎订阅。    💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新 阅读详情

相关推荐

VMware Workstation Pro 25H2 去虚拟化精简便携版完全指南

虚拟机技术在现代开发和测试环境中扮演着重要角色,但客户机系统常因暴露虚拟化特征而被特定软件识别为“虚拟机”,导致功能受限。同时,官方 VMware Workstation Pro 安装包体积大、安装流程繁琐,难以实现移动化部署。去虚拟化通过修改 VMX 配置、屏蔽 CPUID 特征、反射宿主机硬件信息等手段降低被检测概率;精简与便携则通过裁剪非核心文件和改用脚本注册服务,实现即解压即用的轻量化形态。这类改版方案特别适合临时环境搭建、敏感软件兼容测试以及构建随身开发环境。本文从虚拟化检测原理出发,系统梳理了

weixin_34068198的博客 378

2022-05-15:N个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输。 问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件; 问题2:至

2022-05-15:N个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输。 问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件; 问题2:至少需要添加几条传输线路(边),使任意向一个学校发放软件后。 经过若干次传送,网络内所有的学校最终都能得到软件。 2 <= N <= 1000。 从题意中抽象出的算法模型, 给定一个有向图,求: 至少要选几个顶点,才能做到从这些顶点出发,可以到达全部顶点; 至少要加多少条边,才能使得从任何一个顶点出

福大大架构师每日一题 1万+

模电学习笔记(十二)——跨阻放大器

模电学习笔记(十二) 跨阻放大器 跨组运算放大器是将电流信号转换成为电压信号,电流到电压增益基于反馈电阻。 设计目标: 输入 输出 带宽 电源 0A 100uA 0V 7V 20kHz 15V -15V 1.计算R1的值(增益电阻器) 2.计算C1的值满足电路带宽 ...

tang11081023的博客 2万+

poj 1236(强连通分量分解模板题)

传送门 题意:   N(2<N<100)个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输。   问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。   问题2:至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。 从题意中抽象出的算法模型:  ...

weixin_30371469的博客 281

STM32F0实现数字化SPWM纯正弦波逆变器

这个没啥好说的,搭电路的事。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。

forlifefor的专栏 1万+

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第9套模块A:网络构建 & (三)无线网络配置+(四)出口网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第9套模块A:网络构建 & (三)无线网络配置+(四)出口网络配置-命令配置

君逍遥o 1017

POJ 1236 添加最少的边使图变成强联通

题目大意:N(2各学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输,问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。2,至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。

【洛风城】 1526

ICLR 2025 | MambaPEFT: 探索针对Mamba的参数高效微调方法

通过利用海量数据构建大型模型,基于Transformer的模型生态系统已逐步确立。参数高效微调(PEFT)是一项至关重要的技术,它能以最低成本将这些模型应用于下游任务,同时实现高效的性能表现。最近,基于状态空间模型(SSM)的Mamba模型作为Transformer的潜在替代方案受到了广泛关注。尽管已经提出了许多基于Mamba的大规模模型,但如何高效地将预训练的Mamba模型应用于下游任务仍有待研究。在本文中,作者对适用于Mamba的PEFT方法展开了探索性分析。

小白学视觉 326

强连通图 ( Tarjan,邻接矩阵 )——Network of Schools ( POJ 1236 )

题目链接: http://poj.org/problem?id=1236 分析: N个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边学校发送该软件。 Q1:至少需要给多少个学校发放软件,才能使得所有的学校最终能得到软件。 Q2:至少需要增加几条传输路线,使得任意向一个学校发放软件后,经过若干次传输,所有学校都能得到软件。 题解: 找强连通分量,缩点。记f[i]为缩完点

FeBr2的博客 3080

DC Error: The power pin VDD on the cell UASA1/CG_X8_Rdsd2pcm is unconnected. (UPF-581)

【代码】DC Error: The power pin VDD on the cell UASA1/CG_X8_Rdsd2pcm is unconnected. (UPF-581)

baidu_34971492的博客 969

安装并新建windows下wxwroks7.0 bootrom工程

安装licence,将zwrsLicense-vx7-perm.lic粘贴到安装目录C盘WindRiver/license下。现在双击Workbench 4,新建vxworks7.0工程,会出现下面的情况,因为没有licence。编译完成binaries下生成wxwroks x86格式,可以修改bootrom硬件信息的配置了。单击x86_wxwroks工程右键,build project编译工程。双击桌面Workbench 4打开,新建windows下工程。新建完成,选择finish。

wangjie36的博客 1922

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

POJ 1236 Network of Schools(强连通分量) http://poj.org/problem?id=1236 题意:网络中的一学校可以将软件发送给其他一些学校,能够发送给谁取决于他们各自维护的一个清单。将学校看成一个节点,给出每个学校的维护清单,问至少需要复制几次软件,使毎个学校都能够得到该软件,在清单中至少添加几项,可使软件只要复制一次,所有学校都可以得到。 分析:本

code 1110

SIMULINK开发项目实例 1000 例专栏之第960例--基于电力系统稳定性的建模与仿真场景:-含分布式电源的配电网电压稳定性研究

间歇性与随机性:例如,太阳能依赖于日照强度,风能依赖于风速,这使得它们的输出功率具有不确定性。逆变器接口:大多数分布式电源通过逆变器接入电网,这对电网的动态响应特性产生了影响。位置分散:通常分布在用户侧或靠近负荷中心的位置。本文详细介绍了如何使用Simulink结合Simscape Electrical 构建一个用于研究含分布式电源配电网电压稳定性的模型,并提供了详细的仿真流程说明。

xiaoheshang_123的博客 153

POJ 1236 Network of Schools 强连通分量+缩点

POJ 1236 Network of Schools   题意:问,对于一个DAG(又向无环图): 1.至少要选几个点,才能从这些点出发到达所有点 2.至少加入几条边,就能从图中任何一个点出发到达所有点 根据有用定理:有向无环图中所有入度不为0的点,一定 可以由某个入度为0的点出发可达。 (由于无环,所以从任何入度不为0的 点往回走,必然终止于一个入度为0的 点) 先求DAG的强连通分...

LMengi000的博客 289

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【详解】Network of Schools POJ - 1236 ⭐⭐⭐ 【强连通分量 经典】

Network of Schools POJ - 1236 一些学校连接到了一个计算机网络。网络中的学校间有如下约定:每个学校维护一个列表,当该学校收到软件或信息后将会转发给列表中的所有学校(也就是接收方列表)。需要注意的是如果B学校在A学校的接收方列表中,A学校不一定会出现在B学校的接收方列表中。 你现在的任务是写出一个程序来计算必须收到一份软件来使网络中的所有学校都能收到软件的学校的数量的最小...

Suprit's blog 861

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

POJ1236 Network of Schools【Tarjan】【强连通分量】

题目大意: N台电脑之间能够通过有向边(u,v)从第u台电脑传输文件到第v台电脑。如果给第u台电脑投放 一个文件,那么这个文件就能通过有向边传输到第v台电脑上,给你N台电脑的连接情况。 那么问题来了:1、最少向这N台电脑中的几台电脑投放文件,就能使N台电脑都能接收到文件。 2、最少向这N台电脑构成的图中添加几条边,使只向一台电脑投放文件,就能够是N台电脑都 能接收到文件。 思路: 该图中的文件具有传递性。很快发现强连通的特征。对应图中的一个强连通分量,只要向其中的 一个点投放文件,那么这个强连通分量就都能

程序员充电站(itcharge) 2017

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【强连通分量】POJ1236Network of Schools

题目描述: 分析 第一问很显然,把强连通分量缩成一个点之后,图中剩下多少个入度为0的点,就需要发放多少次软件(这些点没有其他点给他分享),对于入度不为0的点,就一定会从到达它的点向它分享软件。 第二问其实问的就是把一个图,通过连边的方式,缩成一个强连通分量,至少需要多少条边。那么有一个很直观的思路:对于每一个入度为0的点,必须向它连一条边,同样的,对于每一个出度为0的点,必须从它...

氧化钠的博客 331

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

http://poj.org/problem?id=1236 Network of Schools Time Limit:1000MS Memory Limit:10000K Total Submissions:9481 Accepted:3767 Description A number of schools a...

diansitao5461的博客 158

poj1236 Network of Schools 强连通分量

#include<cstdio> #include<algorithm> #include<vector> #include<cstring> #include<stack> using namespace std; const int maxn = 100 + 10; vector<int&g...

amily05200的博客 147

POJ 1236 Network of Schools [强连通分量]

POJ 1236 Network of Schools [强连通分量]

ACTerminate的博客 435

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

A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a list of schools to which it distributes software (the “receiving sc...

alex1997222的博客 292

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

题意: 简单来说,给出一张有向图,问至少选择几个点可以遍历全图 和 至少加几条边使任一个点出发都可以遍历全图 分析: 这是一个与强联通分量有关的问题,在强联通分量中任意一个点都可以到达其他点,那么首先对整张图进行缩点操作,将整张图的强联通分量提取出来,tarjan算法操作之后很容易观察到一张图变成了一棵树,那么此时记录ans1为树上入度为0的点,ans2记录树上出度为0的点,那么问题

每一次AC都是一种感动 993
上一篇: POJ 2186 Popular Cows (强连通分量)
下一篇: POJ 1815 Friendship(最小割)
SIO__Five
博客等级 码龄14年 29粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值