USACO 5.3 Network of Schools (强连通分量,缩点)

2015-03-31 23:31:55

思路:给出一个有向图,让你求最少给多少个点(学校)发软件,能使得软件传到全部点(学校)。

     另外还有第二问:添加最少的边使得给任意一点(学校)发软件,能传到全部点(学校)。

  一开始是想直接并查集乱搞... 后来明白题意后... 首先强连通分量里面的点是互相可达的,所以先tarjan一遍再缩点。

  接着考虑第一问,显然是找出缩点后所有入度为0的点,其数量便是第一个答案。

  然后考虑第二问,这个问题以前hdu2767一样,添加最少边使得整个图强连通,那么答案就是缩点后:max(入度为0的点数,出度为0的点数)

  1 /*
  2 ID:naturec1
  3 PROG: schlnet
  4 LANG: C++
  5 */
  6 #include <cstdio>
  7 #include <cstring>
  8 #include <cstdlib>
  9 #include <cmath>
 10 #include <vector>
 11 #include <map>
 12 #include <set>
 13 #include <stack>
 14 #include <queue>
 15 #include <string>
 16 #include <iostream>
 17 #include <algorithm>
 18 using namespace std;
 19 
 20 #define MEM(a,b) memset(a,b,sizeof(a))
 21 #define REP(i,n) for(int i=0;i<(n);++i)
 22 #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
 23 #define getmid(l,r) ((l) + ((r) - (l)) / 2)
 24 #define MP(a,b) make_pair(a,b)
 25 
 26 typedef long long ll;
 27 typedef pair<int,int> pii;
 28 const int INF = (1 << 30) - 1;
 29 const int MAXN = 110;
 30 
 31 int N,tot,scnt;
 32 int first[MAXN],ecnt;
 33 int dfn[MAXN],low[MAXN],sc[MAXN];
 34 int din[MAXN],dout[MAXN];
 35 stack<int> stk;
 36 
 37 struct edge{
 38     int v,next;
 39 }e[MAXN * MAXN];
 40 
 41 void Init(){
 42     MEM(first,-1);
 43     ecnt = 0;
 44     tot = 0;
 45     scnt = 0;
 46 }
 47 
 48 void Add_edge(int u,int v){
 49     e[++ecnt].next = first[u];
 50     e[ecnt].v = v;
 51     first[u] = ecnt;
 52 }
 53 
 54 void Dfs(int p){
 55     dfn[p] = low[p] = ++tot;
 56     stk.push(p);
 57     for(int i = first[p]; ~i; i = e[i].next){
 58         int v = e[i].v;
 59         if(!dfn[v]){
 60             Dfs(v);
 61             low[p] = min(low[p],low[v]);
 62         }
 63         else if(!sc[v]){
 64             low[p] = min(low[p],dfn[v]);
 65         }
 66     }
 67     if(dfn[p] == low[p]){
 68         scnt++;
 69         for(;;){
 70             int x = stk.top(); stk.pop();
 71             sc[x] = scnt;
 72             if(x == p) break;
 73         }
 74     }
 75 }
 76 
 77 void Tarjan(){
 78     MEM(low,0);
 79     MEM(dfn,0);
 80     MEM(sc,0);
 81     while(!stk.empty()) stk.pop();
 82     FOR(i,1,N){
 83         if(!dfn[i]) Dfs(i);
 84     }
 85 }
 86 
 87 int main(){
 88     freopen("schlnet.in","r",stdin);
 89     freopen("schlnet.out","w",stdout);
 90     int a;
 91     Init();
 92     scanf("%d",&N);
 93     FOR(i,1,N){
 94         while(scanf("%d",&a) != EOF && a){
 95             Add_edge(i,a);
 96         }
 97     }
 98     Tarjan();
 99     FOR(i,1,N){
100         for(int j = first[i]; ~j; j = e[j].next){
101             int v = e[j].v;
102             if(sc[i] != sc[v]){
103                 dout[sc[i]]++;
104                 din[sc[v]]++;
105             }
106         }
107     }
108     int cnt1 = 0,cnt2 = 0;
109     FOR(i,1,scnt) if(din[i] == 0) cnt1++;
110     FOR(i,1,scnt) if(dout[i] == 0) cnt2++;
111     int ans1 = cnt1 == 0 ? 1 : cnt1;
112     int ans2 = scnt == 1 ? 0 : max(cnt1,cnt2);
113     printf("%d\n%d\n",ans1,ans2);
114     return 0;
115 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/4382491.html

项目管理 Agent:进度追踪与风险预警 Harness 我们先从LangChain的Agent定义说起:Agent是一个能感知环境、自主决策、调用工具、执行动作、迭代反思的智能实体。而「项目管理全自主Agent」,就是把Agent的核心能力和项目管理的五大过程组(启动、规划、执行、监控、收尾)深度结合,聚焦执行监控阶段的两个核心痛点:进度偏差自动化计算、风险信号自动化识别与预警的专门化Agent。全感知(Omnisensing):能从。 阅读详情

相关推荐

Xilinx XDMA驱动代码分析及用法

Xilinx XDMA驱动代码分析及用法 先简单的介绍一下,赛灵思的XDMA的驱动是用于做什么的、他的主要功能就类似与网卡pcie接口的网卡驱动、用于控制主机与fpga设备进行pcie的通讯。通讯的主要方式是设备文件的读写,这里不清楚的同学可以看一下我上一篇文章。通过控制设备文件的读写,操作驱动与fpga设备进行数据传输。 1、目录结构 zacha@Superman:~/nfs/xdma-debug/dma_ip_drivers-master/XDMA/linux-kernel$ tree -C . ├──

恍恍惚惚的大穷猫的博客 3万+

强连通分量(超详细!!!)

强连通分量(超详细!!!) 一、定义 在有向图G中,如果两个顶点u,v间有一条从u到v的有向路径,同时还有一条从v到u的有向路径,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向非强连通图的极大强连通子图,称为强连通分量。 图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量。 二、tarjan算法时间复杂度是O(N+M) 四条边: 树枝边:DFS时经过的边,即DFS搜索树上的边。 前向边:与DF.

木牛的博客 1万+

badusb详细制作教程(两种方式实现远控)

badusb是一种几乎可以突破任何杀毒软件和防火墙的设备,堪称渗透测试利器 文章目录前言一、什么是badusb?二,badusb的优点三,badusb是如何攻击的?badusb原理HID攻击漏洞产生原因三、准备步骤1.设备2,编辑器的安装与设置四,编写代码(重点)第一种: SEToolkit + badusb实现PowerShell注入攻击第二种:Cobalt Strike + badusb 实现PowerShell注入攻击五,烧录六,badusb有多强大攻击场景总结 BadUSB是《黑客军团》中

Ghost_system的博客 1万+

USACO Network of Schools(学校网络) ---强连通分量

描述 一些学校的校园网连接在一个计算机网络上。学校之间存在软件支援协议。每个学校都有它应支援的学校名单(学校a支援学校b,并不表示学校b一定支援学校a)。当某校获得一个新软件时,无论是直接得到的还是从网络得到的,该校都应立即将这个软件通过网络传送给它应支援的学校。因此,若需要让所有连接在网络上的学校都能使用一个新软件,只需要将其提供给其中一些学校即可。 子任务a:根据学校间软件支援协议(各个学...

weixin_30678821的博客 239

从符号到基元:Token的技术演化史与“词元”汉化的术语学

中文摘要:Token概念演化与"词元"译名的确立 本文系统梳理了"Token"概念从信息论符号到AI基元的完整演化史,揭示了"词元"这一中文译名确立的必然性。概念发展经历了三个阶段:早期作为编译原理中的词法单元(1960s),统计NLP时期作为概率空间的原子(1990s-2000s),以及神经时代成为动态语义载体(2010s后)。随着Transformer架构兴起,Token从静态符号转变为上下文相关的语义基元,其定义彻底突破"词&quo

AllenLV的博客 1222

Vue项目实战:5分钟搞定高德地图离线部署(附避坑指南)

本文详细介绍了在Vue项目中实现高德地图离线部署的完整方案。针对内网或网络隔离环境,通过获取并改造JSAPI文件、下载组织地图瓦片数据,并集成vue-amap组件,实现地图功能的本地化运行。文中提供了核心代码、避坑指南及性能优化建议,帮助开发者快速构建稳定可靠的离线地图应用。

data3的博客 935

洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur

P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-way cow paths all over his farm. The fa...

HJ921004的博客 292

保姆级教程:用安卓手机+IP摄像头App,5分钟搭建一个免费的RTSP监控测试环境

本文提供了一份详细的保姆级教程,教你如何利用安卓手机和IP摄像头App在5分钟内搭建免费的RTSP监控测试环境。通过零成本方案,开发者可以快速获取实时视频流,适用于计算机视觉、物联网开发等多种场景。教程涵盖工具选型、配置详解、电脑端测试及OpenCV集成,助你高效完成开发测试。

weixin_27419879的博客 275

BZOJ 1589 [Usaco2008 Dec] Tarjan缩点+记忆化搜索 解题报告

1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果Description每年万圣节,威斯康星的奶牛们都要打扮一番,出门在农场的N(1≤N≤100000)个牛棚里转悠,来采集糖果.她们每走到一个未曾经过的牛棚,就会采集这个棚里的1颗糖果. 农场不大,所以约翰要想尽法子让奶牛们得到快乐.他给每一个牛棚设置了一个“后继牛棚”.牛棚i的后继牛棚是Xi.他

onepointo 333

微信本地数据解密实战:从AES加密原理到EnMicroMsg.db恢复指南

数据加密是保障信息安全的核心技术,其中对称加密算法AES因其高效可靠,被广泛应用于各类本地数据保护场景。其原理是通过特定密钥对数据进行混淆转换,确保未经授权者无法读取原始内容。在移动应用领域,本地数据库加密对于保护用户隐私、防止数据泄露具有重要价值。微信作为国民级应用,对其本地存储的聊天记录数据库(EnMicroMsg.db)采用了基于设备标识和用户UIN生成的AES-256-CBC加密方案。理解这一机制,不仅有助于在合法合规前提下进行个人数据备份与恢复,也为开发者进行客户端安全分析、兼容工具开发提供了基础

weixin_30764883的博客 570

数十个锂电池充放电电路,锂电池充放电芯片

关乎锂电池供电的产品,在锂电池上,需要三个电路系统:1,锂电池保护电路,2,锂电池充电电路,3,锂电池输出电路。 内容目录: 单节的锂电池保护电路单节为3.7V锂电池(也叫4.2V)和3.8V锂电池(也叫4.35V) 单节的锂电池充电电路即锂电池保护板 单节的锂电池输出电路锂电池转换稳压输出为:1.2V,3.3V,5V,12V等等 两节的锂电池保护电路两节串联7.4V锂电池(也叫8.4V) 两节的锂电池充电电路即两节锂电池保护板 两节...

kuakewei123的博客 1万+

Tarjan缩点 [USACO5.3]校园网Network of Schools (洛谷 P2746)

[USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络。那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”)。注意即使 B 在 A 学校的分发列表中,A 也不一定在 B 学校的列表中。 你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软件,必须接受新软件副本的最少学校数目(子任务 A)。更进一步,我们想要确定通过给任...

不知所云的博客 221

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

w0shishabi的博客 5685

【缩点】解题报告:luogu P2746 [USACO5.3]校园网Network of Schools(有向图、强连通分量、缩点)

题目链接:P2746 [USACO5.3]校园网Network of Schools 用tarjan算法求出强连通分量,并且缩点,如果缩点后只有一个点,则答案为1,0 对于第一问,如果缩点后某一点的入度为0,则它肯定要一份软件,如果不为0,则一定可以从别的点获得软件,而对于下一个问题,缩点后,对每个出度为0的点,需拓展一条出边,对每个入度为0的点,需拓展一条入边,则可以完成条件。所以为了拓展的边更少,可以从出度为0的点向入度为0的点拓展边。所以所需最少的拓展数即出度为0的点数和入度为0的点数的较大者。 #

繁凡さん的博客 498

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

洛谷 P2746 [USACO5.3]校园网Network of Schools 强连通分量 缩点 tarjan

题目链接: https://www.luogu.org/problem/P2746 参考博客: https://www.luogu.org/blog/top-oier/solution-p2746 1:强烈推荐再次认真细读该博客,思路分析十分到位,这里我就不再细讲 注意: 1:color数组存的是每一个节点的颜色,在同一个连通分量中的点颜色相同 2:缩点以后,可以保证图里没有环,只有...

aiwo1376301646的博客 258

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

洛谷P2746 [USACO5.3]校园网Network of Schools--强连通分量缩点判断出度入度

题目描述 一些学校连入一个电脑网络。那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”)。注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中。 你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软件,必须接受新软件副本的最少学校数目(子任务 A)。更进一步,我们想要确定通过给任意一个学校发送新软件,这个软件就会分发到网络中的所有学校。为了...

weixin_43918046的博客 213

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[IOI 1996 / USACO5.3] Network of Schools

摘要 本文解决了一个关于学校软件分发的问题。给定各学校间的单向软件分享关系,需要回答:1)至少向多少学校分发软件才能使所有学校获得软件;2)最少需要增加多少分享关系才能实现仅向任意一个学校分发一次就能覆盖所有学校。 解法首先使用Tarjan算法将学校网络缩点为强连通分量。对于问题1,答案即为入度为0的强连通分量数量。对于问题2,当强连通分量数大于1时,答案等于入度为0和出度为0的强连通分量数的最大值;否则答案为0。代码实现了上述算法,时间复杂度主要由Tarjan算法决定。

bz_2023f33的博客 994

[USACO5.3]校园网Network of Schools

P2746 [USACO5.3]校园网Network of Schools 缩点 蒟蒻在这道题上wa了六次…… 错误一: 结论推错了 任务B的答案是根数和叶子数中较小的那个 也就是说加路前的各个树加路之后不一定是强连通分量 错误二: 特判 当只有一个点的时候 任务二输出0 1 int main(){ 2 init(); 3 for(in...

125

P2746 [USACO5.3]校园网Network of Schools 缩点拓扑

题意:n个点,接下来n行每行代表第i 个点和这一行的点有一条有向边,每行以0结束。 两个问题:1.最少从几个点出发能到达所有点, 2.使得任意一点出发能到达所有点最少加多少条有向边。 解:先缩点建图,强连通缩点后图上就没有环只有链,那么每条链就有唯一入度为0的点 1.图中入度为0点的个数,2.出度和入度为0的最大者(加边使得不存在出度和入度为0的点)。注意只有一个连通块 特判! ...

恒持此志成永志 466

洛谷 P2746 [USACO5.3]校园网Network of Schools (缩点)

题目链接 本题的第一问的确很模板,但第二问却没有那么简单。看很多题解都直接贴结论,就算有讲解的也极其简略,这里写一篇较详细的 首先,将原图进行缩点,形成一个由若干个连通块组成的DAG。 我们先考虑单个连通块的情况: 很显然是 出度为零的点数与入度为零的点数的最大值,因为一条边可以给两个(一个入度为零一个出度为零)点做出贡献。 这样,不管你从哪个点开始,你都可以走到一个末端点 xxx(出度为零),从而走到一个与 xxx 连通的一个初始点(入度为零)。接下来,因为你在一个初始点,所以你可以走到该连通块内所有的末

Brian_Pan_的博客 255

USACO Training 5.3.3 Network of Schools 校园网 题解与分析

Network of Schools 校园网 IOI '96 Day 1 Problem 3 描述 一些学校连入一个电脑网络。那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”)。注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中。 你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软件,必须接受新软件副本的最少学校数目

初学者 1083

【题解】洛谷P2746 [USACO5.3]校园网Network of Schools(tarjan)

你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软件,必须接受新软件副本的最少学校数目(子任务A)。注意即使B在A学校的分发列表中,A也不一定在B学校的列表中。对于题目,我们只需要给一个起点,也就是无法从其他学校获取新软件的学校,必须给他发,从而我们可以得知,该点入度为0,那么对于子任务A,也就是。接下来N行中每行都表示一个接收学校列表(分发列表),第i+1行包括学校i的接收学校的标识符。若有错误之处,欢迎指正,啦啦啦啦啦啦啦啦~~~~~~~~~~~~~~~.........

qq_61153735的博客 351

洛谷 P2746 [USACO5.3] 校园网Network of Schools

题目链接: https://www.luogu.org/problemnew/show/P2746 题意: 给定n个点,第i+1行的是第i个点连向的点,也就是给了一个有向图,问最少需要选定几个点,通过这些选定的点,可以到达图中任何点,第二问,再添几条边可以使整个图成为一个连通图,即任意两点可达; 分析: 显然应先对整个图缩点,第一问的结果应该等于,整个图缩点后,入度为0的强连通分量的个数,对于第二...

梧桐 274

P2746 [USACO5.3]校园网Network of Schools

题目地址 简述: 缩点后进行条件判定. 易错点: 首先,可以进行缩点. 子任务1:缩点后入度为零的强连通分量必须要有新软件. 子任务2:要求加边后形成一个强连通图。可以考虑到缩点后的DAG上每个点都必须同时具有入度和出度,就可以将没有入度的点的数量记为p,没有出度的点的数量记为q;由于没有出度的点可以直接连接没有入度的点,答案即为max(p,q). #include<cstd...

Object_的博客 157

洛谷 P2746 [USACO5.3]校园网Network of Schools

题目描述 一些学校连入一个电脑网络。那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”)。注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中。 你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软件,必须接受新软件副本的最少学校数目(子任务 A)。更进一步,我们想要确定通过给任意一个学校发送新软件,这个软件就会分发到网络...

weixin_30872671的博客 73

洛谷 P2746 [USACO5.3]校园网Network of Schools tarjan缩点

https://www.luogu.org/problem/P2746 题目描述 一些学校连入一个电脑网络。那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”)。注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中。 你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软件,必须接受新软件副本的最少学校数目(子任务 A)。更进一步,我们想要确...

xiji333的博客 184
上一篇: USACO 5.3 Window Area (矩形切割,上浮法)
下一篇: USACO 5.3 Big Barn (DP)
dingdi3021
博客等级 码龄11年 1粉丝 230原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值