【LeetCode6085 道路的最大总重要性】双周赛

题目描述

给你一个整数 n ,表示一个国家里的城市数目。城市编号为 0 到 n - 1 。

给你一个二维整数数组 roads ,其中 roads[i] = [ai, bi] 表示城市 ai 和 bi 之间有一条 双向 道路。

你需要给每个城市安排一个从 1 到 n 之间的整数值,且每个值只能被使用 一次 。道路的 重要性 定义为这条道路连接的两座城市数值 之和 。

请你返回在最优安排下,所有道路重要性 之和 最大 为多少。

在这里插入图片描述在这里插入图片描述
提示

  • 2 <= n <= 5 * 104
  • 1 <= roads.length <= 5 * 104
  • roads[i].length == 2
  • 0 <= ai, bi <= n - 1
  • ai != bi
  • 没有重复道路。

解题思路

利用贪心的策略将连接点数最多的点被安排最大的编号(反之连接线断最少的被安排最小的编号),依次安排完毕完。每个点有多少个连接线,那么他的所被安排的值就会加多少次。

  long long maximumImportance(int n, vector<vector<int>>& roads) {
    
    
	vector<int> tmp(n,0);
	for(auto x:roads){
    
    
		for(auto y:x){
    
    
			tmp[y]++;//计算每一个点有多少个连接线段
		}
	}
	long long ans=0;
	sort(tmp.begin(),tmp.end());//排序,连接线段最多的被安排最大的值,反之连接线断最少的被安排最小的值
	for(int i=1;i<=n;i++)
		ans+=1ll*i*tmp[i-1];//1ll(1 long long)是为了高精度计算
	return ans;
}

猜你喜欢

转载自blog.csdn.net/mitongxue/article/details/125025705