首页 > 其他分享 >【洛谷】AT_abc079_d [ABC079D] Wall 的题解

【洛谷】AT_abc079_d [ABC079D] Wall 的题解

时间:2024-10-01 10:20:48浏览次数:7  
标签:Wall 题解 abc079 long read int Floyd ans

【洛谷】AT_abc079_d [ABC079D] Wall 的题解

洛谷传送门

AT传送门

题解

不懂就问,为什么 ABC 很喜欢出板子题。

经典的 Floyd qaq

题目给出了一个二维数组和 0 0 0 ~ 9 9 9 中不同数字之间变化的花费,求将这个二维数组中的所有数字都变成 1 1 1 所需要的最小花费的和。

要想把所有数变成 1 1 1,那有两种选择,一是直接变成 1 1 1,二是将这个数先变成其他某个数,再有那个数继续迭代下去,所以,就可以想到 Floyd。

首先跑一边 Floyd ,求出 c [ a [ i ] [ j ] ] [ 1 ] c_{[a[i][j]][1]} c[a[i][j]][1]​的最短路,最后循环求和。

代码

#include <bits/stdc++.h>
#define lowbit(x) x & (-x)
#define endl "\n"
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
namespace fastIO {
	inline int read() {
		register int x = 0, f = 1;
		register char c = getchar();
		while (c < '0' || c > '9') {
			if(c == '-') f = -1;
			c = getchar();
		}
		while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
		return x * f;
	}
	inline void write(int x) {
		if(x < 0) putchar('-'), x = -x;
		if(x > 9) write(x / 10);
		putchar(x % 10 + '0');
		return;
	}
}
using namespace fastIO;
int h, w, c[15][15], a[205][205], ans = 0; 
int main() {
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	h = read(), w = read();
	for(int i = 0; i <= 9; i ++) {
		for(int j = 0; j <= 9; j ++) {
			c[i][j] = read();
		}
	}
	for(int i = 1; i <= h; i ++) {
		for(int j = 1; j <= w; j ++) {
			a[i][j] = read();
		}
	}
	for(int k = 0; k <= 9; k ++) {
		for(int i = 0; i <= 9; i ++) {
			for(int j = 0; j <= 9; j ++) {
				c[i][j] = min(c[i][j], c[i][k] + c[k][j]);
			}
		}
	}
	for(int i = 1; i <= h; i ++) {
		for(int j = 1; j <= w; j ++) {
			if(a[i][j] != -1) {
				ans += c[a[i][j]][1];
			}
		}
	}
	write(ans);
	return 0;
}

标签:Wall,题解,abc079,long,read,int,Floyd,ans
From: https://blog.csdn.net/ZH_qaq/article/details/142668450

相关文章

  • Cisco Secure Firewall 4200 Series FTD Software 7.6.0 & ASA Software 9.22.1
    CiscoSecureFirewall4200SeriesFTDSoftware7.6.0&ASASoftware9.22.1FirepowerThreatDefense(FTD)Software-思科防火墙系统软件请访问原文链接:https://sysin.org/blog/cisco-firepower-4200/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoSec......
  • 题解 CF1785D - Range = √Sum
    link\(\texttt{Describe}\)构造有\(n\)个数的序列,满足以下条件:\(\foralli\in[1,n]\)并且\(1\lea_i\le10^9\)。对于任何的\(1\lei,j\len(i\nej)\),\(a_i\nea_j\)。\((\max_{i=1}^{n}a_i-\min_{i=1}^{n}a_i)^2=\sum_{i=1}^{n}a_i\)。......
  • vscode 运行 C++分文件显示 undefined reference to 问题解决
    一、问题无法关联到对应的方法。  二、结局方法1、第一步,查看.vsode文件夹里面的task.json文件;设置里面参数;${file}改成 ${fileDirname}\\*.cpp 2、第二步 2.1、打开coderunner的setting.json文件; 2.2、将 $fileName改成*.cpp 3.3、最后起哄一下vs......
  • 题解:P11062 【MX-X4-T2】「Jason-1」加法
    考虑两种情况:\(a,b\)符号相同:考虑经过操作后\(a,b,\lverta-b\rvert\)会变成什么。:\(a\)\(b\)\(\lverta-b\rvert\)操作1\(a+b\)\(b\)\(\lverta\rvert\)操作2\(a\)\(a+b\)\(\lvertb\rvert\)可以看出只进行零次或一次操作后可以取到最小值......
  • 题解:P11129 【MX-X5-T1】「GFOI Round 1」Inverted World
    题目要求:\((a_l+\cdots+a_r)\div(r-l+1)\)是整数。即\(\frac{(a_l+a_r)\cdot(r-l+1)\div2}{r-l+1}\)为整数。即\(\frac{(a_l+a_r)}{2}\)为整数。即\(a_l+a_r\)为偶数。即\(m+(l-1)\cdotd+m+(r-1)\cdotd\)为偶数。即\(2m+(l+r-2)\cdotd\)为偶......
  • 大单元综合测试(一):第一章,第二章题解
    \(6.\)已知\(3a>b>0\),则\(\large\frac{a}{3a-b}-\frac{b}{a+b}\)的最小值为多少?基本方法\(\qquad\)对于高中基本不等式,这种分母较为复杂的求最值问题,我们一般都会采用将分母换元换元的方法,理由很自然,因为分式是分子除分母,所以分母形式的简单可以方便我们对问题的处理。那么......
  • AtCoder Beginner Contest 365题解
    A-LeapYear按照题意模拟即可。codeB-SecondBest按照题意模拟即可。codeC-TransportationExpenses考虑当\(x\)增大时,\(\min(x,a_i)=x\)的项会越来越少。换言之,当\(x\)足够大时,\(ans=\suma_i\),若此时\(ans>M\)则说明无论补贴多少,这时答案都是一定的......
  • 常见问题解决 --- 如何解决CROS跨域问题
    问题原因:前后端不是一个服务导致的浏览器禁止访问的安全问题。比如前端部署在http://x.x.x.x:8888,后端部署在http://x.x.x.x:9999,由于端口不一致,浏览器安全起见不允许一个web页面有不同ip或端口的地址发送出流量。在开发者工具可以看出CROS错误。解决办法:关闭浏览器安全策......
  • 小澳的葫芦 题解
    网上这么多大佬用01分数规划(完全不会),这里写一篇分层图造福社会。前置芝士:最短路。一个有向无环图,第一个想到的就是拓扑排序。定义\(dp(i)\)为到达第\(i\)个点所需要的经过点数和边权和(一个pair),正常转移即可。然后就发现假了。因为如果能够这样转移,就一定满足:\[\fra......
  • 题解:P6902 [ICPC2014 WF] Surveillance
    可以在cnblog中阅读。考虑弱化版链怎么做,每次选取左端点在当前位置前面的线段,跳到其中最大的右端点,可以维护一个数组表示起点为\(i\)的目标位置,可以做到\(O(n+k)\)。考虑多次询问一段区间\([l,r]\)的答案,这时如果暴力从\(l-1\)开始跳是\(O(n^2)\)的,只需要一个倍增数......