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;
}


YOLOv11改进 | 损失函数改进篇 | MPDIoU、InnerMPDIoU助力细节涨点(二次创新 + 代码解析) 本文为读者详细介绍了YOLOv11模型的最新改进,带来的改进机制是最新的损失函数MPDIoU和融合了最新的Inner思想的InnerMPDIoU(效果打爆之前的所有的损失函数提升检测精度和处理细节方面的作用。通过深入探讨MPDIoU和InnerMPDIoU(全网首发)的工作原理和实际代码实现,本文旨在指导读者如何将这些先进的损失函数技术应用到YOLOv11模型中,以提高其性能和准确性。文章内容涵盖从理论基础、代码实现,到实际教你如何添加本文的机制到你的模型中。 阅读详情

相关推荐

第三篇:AMD 和 Intel

它像“乐高积木”一样,可以通过标准化的接口与其他部分组合,构建复杂系统。理解组件后,你会发现从操作系统到微服务,现代软件本质上都是组件的组合!

u013089100的博客 1031

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

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

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

反相器(inverter)和缓冲器(buffer)---附加与非门原理图

下面是对反相器(Inverter)和缓冲器(Buffer)从面积、驱动能力、时序等多个角度的详细对比,列出的是一般情况下的比较,具体情况可能会受到工艺节点、设计库和特定设计要求的影响。缓冲器(Buffer)是数字电路中常见的逻辑门之一,用于增强信号的驱动能力,而不改变信号的逻辑状态。如下图所示的CMOS反相器,由一个NMOS和PMOS组成,栅端gate相连作为输入端Vin,漏端相连作为输出端Vout,NMOS的源端接地,PMOS的源端接电源VDD.与反相器不同,缓冲器的输出与输入保持相同的逻辑状态。

hzmscut的博客 1万+

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

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

weixin_30371469的博客 281

【Unity游戏开发】SDK接入与集成——小白入门篇

一、简介   通常一款游戏开发到后期,一般都会涉及到第三方SDK的接入与集成,对于不熟悉SDK接入的同学来说,接SDK每次都是云里雾里,而熟悉SDK接入的同学又觉得不断地重复做接入SDK工作这样没有成就感,太尼玛无聊了(Android渠道一弄就十几个,直接吐血)。其实通常情况下接入SDK都是很简单的一个过程,本系列博客就让马三和大家从小白开始,从零基础开始学习如何接入SDK以及一些常见的SDK的...

weixin_34195142的博客 5763

ROS2学习笔记(二)-- 多机通讯原理简介及配置方法

简单介绍ROS2多机通信原理以及配置注意事项

aibingjin的博客 1万+

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

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

【洛风城】 1526

STM32平台中ARM架构向量表配置:手把手教程

深入讲解STM32平台下arm架构的向量表配置方法,结合实际操作步骤,帮助开发者掌握中断向量的定位与初始化,提升嵌入式系统开发效率。

weixin_42514540的博客 802

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

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

FeBr2的博客 3080

prometheus 从入门到精通(史上最全)

Prometheus(由go语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机,服务,容器,支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。原文链接:https://blog.youkuaiyun.com/qq_45277554/article/details/130917620时间序列数据。

流水_鱼鱼的博客 1万+

NPP/VIIRS夜间灯光数据:从下载到应用的完整指南

本文提供了NPP/VIIRS夜间灯光数据从下载、处理到应用的完整实战指南。详细介绍了如何从官方源获取数据、解读文件结构、进行坐标校正与数据清洗,并深入探讨了其在城市扩张监测、社会经济指标估算、重大事件影响评估等领域的核心应用。文章旨在帮助研究者与从业者快速掌握这一强大的空间数据,将其转化为研究中的实用工具。

gpu4optimizer的博客 864

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

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

code 1110

华为OD机试真题 新系统 2026-06-10 C++ 实现【设备重排SN】

通信设备SN一般是包含:字母、数字,用'-'(破折号)进行分组分割,例如:8F-3T-1G-2n是一个有效的SN地址。 现在要对已经存在的SN 按照新的规则进行重排:

MISAYAONE的博客 129

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

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

LMengi000的博客 289

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

Suprit's blog 861

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

程序员充电站(itcharge) 2017

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【强连通分量】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、付费专栏及课程。

余额充值