首页 > 其他分享 >[题解]P5687 [CSP-S2019 江西] 网格图

[题解]P5687 [CSP-S2019 江西] 网格图

时间:2024-11-15 20:56:36浏览次数:1  
标签:int 题解 P5687 网格 posa 最多能 S2019 CSP

P5687 [CSP-S2019 江西] 网格图

简单来说题目就是给定一个\(n\times m\)的网格图,同行边权相同,同列边权相同,求该网格图的最小生成树。

根据Kruskal算法的贪心思想,我们要优先选择权值尽可能小的行,并将这条边应用于尽可能多的列。列方向同理。

为了保证最终生成树的连通性,我们显然要先把最小的行和最小的列全都选上,如下图所示:

可以发现,如果当前已经选择了\(x\)组行方向上的边,此时如果选列方向上的边,则最多能放\(n-x\)条。列方向同理。

根据贪心思想,接下来我们选择第\(3\)行,此时我们最多能放\(8-1=7\)条边,将其全部选择。

根据贪心思想,接下来我们选择第\(6\)列(或第\(2\)列),此时我们最多能放\(5-2=3\)条边,将其全部选择。
我们发现最多只能放\(3\)条,否则一定会出现环。
……

有了上面的结论,我们就可以写出代码了。将行和列的权值分别排序,先各选去一个最小值,再用两个指针分别指向两个数组的第\(2\)为,每次选权值最小的行/列即可。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define N 300010
using namespace std;
int n,m,a[N],b[N],posa,posb,ans,cnt;
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=m;i++) cin>>b[i];
	sort(a+1,a+1+n);
	sort(b+1,b+1+m);
	posa=1,posb=1;
	ans=a[1]*(m-1)+b[1]*(n-1),cnt=n+m-2;
	while(1){
		if(a[posa+1]<b[posb+1]){
			ans+=a[++posa]*(m-posb),cnt+=(m-posb);
		}else{
			ans+=b[++posb]*(n-posa),cnt+=(n-posa);
		}
		if(cnt==n*m-1) break;
	}
	cout<<ans<<"\n";
	return 0;
}

标签:int,题解,P5687,网格,posa,最多能,S2019,CSP
From: https://www.cnblogs.com/Sinktank/p/18548558

相关文章

  • 题解: BZOJ3517 翻硬币
    ProblemLinkBZOJ3517翻硬币题目描述有一个\(n\)行\(n\)列的棋盘,每个格子上都有一个硬币,且\(n\)为偶数。每个硬币要么是正面朝上,要么是反面朝上。每次操作你可以选定一个格子\((x,y)\),然后将第\(x\)行和第\(y\)列的所有硬币都翻面。求将所有硬币都变成同一个面最少......
  • ISCTF比赛PWN题前三题题解
    萌新第一次发布题解,如有错误还请各位大佬指出。本次比赛个人pwn出题情况,还是太菜了,后面四题基本看不懂girlfriend解题思路:利用填充覆盖检查位置,绕过前面admin检查,进入vuln函数,经过动调发现,每次数据存放位置,从而达到提权解题过程存在后门函数read可以读取0x30大小,观察buf......
  • P9870 [NOIP2023] 双序列拓展 题解
    P9870[NOIP2023]双序列拓展题解NOIP2023T3,特殊性质题。什么是特殊性质题?就是题目给出了你极其神秘的性质,从而引导你想出正解。本篇题解将从部分分的角度,一步步讲述部分分与正解的关系。这样看的话,本题会变得十分简单。\(\text{Task}1∼7,O(Tnm)\)简化题意其实就是要求......
  • Toyota Programming Contest 2024#11(AtCoder Beginner Contest 379)题解总结
    AtCoderBeginnerContest379Rated:\(770\)A-Cyclic简单模拟。B-Strawberries字符串模拟,substr函数秒了C-Repeating中等模拟。思路:判断是否合法很简单,重点在计算花费。假设我们是\(0\)号点有\(N\)个棋子,然后移动到每个点上,显然花费为\(\frac{N(N+1)}{......
  • [CEOI2023] The Ties That Guide Us 题解
    Description你用销售机器人的利润雇佣了一名助手,现在你准备好去拿走装有CEOI奖章的保险箱了。保险箱位于一所由\(n\)个房间所组成的大学建筑内,这些房间由\(n-1\)扇门连接。每个房间都可以从其他任何房间到达,且每个房间最多与\(3\)扇门相连。你和你的助手都有描述建筑物......
  • P1437 敲砖块 题解
    题意在一个凹槽中放置了\(n\)层砖块、最上面的一层有\(n\)块砖,从上到下每层依次减少一块砖。每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示:14154323333376221311222331如果你想敲掉第\(i\)层的第\(j\)块砖的话,若\(i=1\),你可以直接......
  • [CEOI2023] Tricks of the Trade 题解
    Description有\(n\)个机器人排成一排,第\(i\)个机器人的购买价是\(a_i\)欧元,卖出价是\(b_i\)欧元。给定\(1\lek\len\),你需要购买一段长度至少为\(k\)的区间中所有的机器人,然后选择其中的恰好\(k\)个机器人来卖出。你需要求出:你能够得到的最大收益;在收益最大化......
  • P11276 第一首歌 题解
    P11276第一首歌题解一道简单的字符串题目。题目解释说求一个最短的字符串\(t\),使其满足对于给定的字符串\(s\):\(s\)为\(t\)的前缀。\(s\)为\(t\)的后缀。\(s\)不为\(t\)。仔细思考一下,则易得\(t\)的最短长度的最大值为\(s\)的两倍。即当\(s\)......
  • 读数据质量管理:数据可靠性与数据质量问题解决之道04收集与清洗
    1.      收集数据1.1.        数据收集和清洗是生产管道中的第一步1.1.1.          数据转换和测试则在生产管道中解决数据质量问题1.2.        在收集数据时,管道的任何地方可能都没有入口点重要,因为入口点是任何数据管道中最上游的位......
  • 题解:P11277 世界沉睡童话
    比较简单的构造。注意到题面给出\(a_i\le2n-1\)的条件,考虑这个有什么用,你会发现从\(n\)到\(2n-1\)这\(n\)个数都是两两互不为约数,所以当我们构造出序列后,这些数可以用来填补空位。\(k\)的上界是\(\frac{n(n-1)}{2}\),显然在全部都为同一个数的时候取到,显然有\(x\)个......