news 2026/5/23 6:16:38

P2746题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
P2746题解

问题:
本题描述了一个有向图模型:
每个学校是一个节点
学校间的分享关系构成有向边(如果 a 分享给 b,则存在 a→b 的边)
需要解决两个独立的问题:
1.至少需要向几个学校发放软件,才能让所有学校都获得软件
相当于找到最少数量的起点,使得从这些起点出发可以到达所有节点
2.至少需要添加多少条边,使得整个图变成强连通图
使得无论从哪个学校发放软件,所有学校都能获得软件
思路:
使用 Tarjan 算法缩点后:
对于问题1:
缩点后得到 DAG(有向无环图)
需要发放软件的学校数量 = DAG 中入度为 0 的强连通分量数量
因为入度为 0 的点没有其他点能到达它,必须作为起点
对于问题2:
需要使 DAG 变成强连通图
最少需要添加的边数=max(入度为0的点数, 出度为0的点数)
特殊情况:如果整个图已经是一个强连通分量,答案为 0
算法:
使用 Tarjan 算法求强连通分量
对每个未访问的节点进行 DFS
维护 dfn(访问顺序)和 low(能回溯到的最早节点)
当 low[u] == dfn[u] 时,找到一个强连通分量
缩点并统计度数
对原图的每条边,如果两端点在不同分量,则在缩点后的图中添加边
统计每个分量的入度和出度
计算答案
问题1:入度为0的分量个数
问题2:如果只有一个分量:0
否则:max(入度为0的个数, 出度为0的个数)
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,tot,tp,cl;
vector<int>g[N];
int dfn[N],low[N],st[N],col[N],sz[N];
int ind[N],oud[N];
void tarjan(int u){
dfn[u]=low[u]=++tot;
st[++tp]=u;
for(int v:g[u]){
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(!col[v])low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u]){
col[u]=++cl;
while(st[tp]!=u){
col[st[tp]]=cl;
tp--;
}
tp--;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
while(x){
g[i].push_back(x);
cin>>x;
}
}
for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);
for(int u=1;u<=n;u++){
for(int v:g[u]){
if(col[u]!=col[v]){
ind[col[v]]++;
oud[col[u]]++;
}
}
}
int ans1=0,ans2=0;
for(int i=1;i<=cl;i++){
if(!ind[i])ans1++;
if(!oud[i])ans2++;
}
cout<<ans1<<endl;
if(cl==1)cout<<0;
else cout<<max(ans1,ans2);
return 0;
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 11:28:50

小米AI音箱固件兼容性终极指南:告别配置失败,让xiaogpt完美运行

你是否曾经满怀期待地配置好xiaogpt&#xff0c;却发现小米AI音箱毫无反应&#xff1f;或者升级固件后&#xff0c;原本流畅的对话突然中断&#xff1f;别担心&#xff0c;你不是一个人&#xff01;通过本文的深度测试与分析&#xff0c;我们将帮你彻底解决这些兼容性难题。 【…

作者头像 李华
网站建设 2026/5/22 13:07:02

Cloudpods多云管理平台:从零开始的完整部署与使用指南

Cloudpods多云管理平台&#xff1a;从零开始的完整部署与使用指南 【免费下载链接】cloudpods 开源、云原生的多云管理及混合云融合平台 项目地址: https://gitcode.com/yunionio/cloudpods Cloudpods是一款开源、云原生的多云管理及混合云融合平台&#xff0c;能够帮助…

作者头像 李华
网站建设 2026/5/22 4:53:43

VFlow高性能流处理平台终极部署指南

项目快速概览 【免费下载链接】vflow 项目地址: https://gitcode.com/gh_mirrors/vfl/vflow VFlow是由EdgeCast开发的一款高性能、可扩展且可靠的开源流处理平台&#xff0c;专为IPFIX、sFlow和Netflow数据收集而设计。这个基于纯Golang构建的解决方案能够高效处理网络…

作者头像 李华
网站建设 2026/5/22 12:36:05

如何判断高低温交变湿热试验箱品牌的质量是否过硬?

在环境可靠性测试领域&#xff0c;高低温交变湿热试验箱是评估产品耐候性与稳定性的关键设备。选购一台质量过硬的试验箱&#xff0c;不仅关乎测试数据的准确性&#xff0c;更直接影响研发进度与产品质量。面对市场上众多的品牌&#xff0c;用户需从核心技术、制造工艺、长期稳…

作者头像 李华
网站建设 2026/5/22 13:12:19

编程竞赛备考:如何利用考级检验基础能力?

编程竞赛备考:如何利用考级检验基础能力? 学习层次划分 从专业角度看,青少年编程学习和考级大致可以划分为三个层次。 第一层:兴趣启蒙与基础认知帮助孩子在信息素养、图形化编程等环节建立计算思维,夯实基础概念,避免一开始就被抽象语法劝退。 第二层:系统进阶与能力…

作者头像 李华
网站建设 2026/5/22 8:01:08

LangChain RAG 学习笔记:从文档加载到问答服务

LangChain RAG 学习笔记&#xff1a;从文档加载到问答服务我在先前的随笔中分享过用Dify低代码平台来实现问答系统&#xff0c;也有几篇随笔是通过不同的方式来访问大模型。本篇将使用LangChain来做对应的实现。相关代码主要是通过Trae&#xff0c;它可以帮助你快速的了解了基本…

作者头像 李华