首页IT科技最大网络号怎么算(1615. 最大网络秩)

最大网络号怎么算(1615. 最大网络秩)

时间2025-05-05 04:39:51分类IT科技浏览3454
导读:题目描述:...

题目描述:

n 座城市和一些连接这些城市的道路 roads 共同组成一个基础设施网络          。每个 roads[i] = [ai, bi] 都表示在城市 ai 和 bi 之间有一条双向道路              。

两座不同城市构成的 城市对 的 网络秩 定义为:与这两座城市 直接 相连的道路总数    。如果存在一条道路直接连接这两座城市          ,则这条道路只计算 一次      。

整个基础设施网络的 最大网络秩 是所有不同城市对中的 最大网络秩              。

给你整数 n 和数组 roads              ,返回整个基础设施网络的 最大网络秩          。

来源链接

示例1: 

示例2:

 示例3:

 题目解析

使用一个数组road_size统计每个城市的直接相连道路数    ,使用一个数组flag统计任意两个城市之间是否存在相连道路     ,枚举所有城市对              ,计算网络秩     。

关键在于如何计算城市对(i,j)的网络秩:

网络秩是与这两座城市直接相连的道路总数         ,因此首先要分别得到城市i和城市j相连的道路数     ,记为road_size[i]和road_size[j];

道路总数就等于road_size[i] + road_size[j];

但是如果城市i和城市j之间有道路连接              ,那么在统计road_size[i]和road_size[j]都会将这条道路统计进去         ,即存在重复统计,因此需要在最终结果再减1;

因此我们需要统计两个内容:

每个城市的直接相连道路数road_size[i]               ,使用一个长度为n的数组进行统计;

任意两个城市之间是否存在相连道路flag[i][j]              ,使用一个规模为n × n的数组进行统计,存在记为true          ,不存在记为false;

因此城市对(i,j)的网络秩 = road_size[i] + road_size[j] - flag[i][j]             , 枚举所有城市对    ,找到最大网络秩              。

代码:

class Solution { public: int maximalNetworkRank(int n, vector<vector<int>>& roads) { vector<int>road_size(n, 0); vector<vector<bool>>flag(n, vector<bool>(n, false)); int row = roads.size(); if(row==0) { return 0; } for(int m=0; m<row; ++m) { road_size[roads[m][0]]++; road_size[roads[m][1]]++; flag[roads[m][0]][roads[m][1]]=true; flag[roads[m][1]][roads[m][0]]=true; } int ma=0; int tmp=0; for(int i=0; i<n; ++i) { for(int j=i+1; j<n; ++j) { tmp=road_size[i]+road_size[j]-flag[i][j]; if(ma<tmp) { int change = tmp; tmp = ma; ma = change; } } } return ma; } };

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
ChatGPT解锁限制(ChatGPT解开了我一直以来对自动化测试的疑惑)