Atcoder ABC340 D - Super Takahashi Bros.

2024-02-20 17:12

本文主要是介绍Atcoder ABC340 D - Super Takahashi Bros.,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Super Takahashi Bros.(超级高桥兄弟)

时间限制:2s 内存限制:1024MB

【原题地址】

所有图片源自Atcoder,题目译文源自脚本Atcoder Better!

点击此处跳转至原题

【问题描述】

在这里插入图片描述

【输入格式】

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

【输出格式】

在这里插入图片描述

【样例1】

【样例输入1】

5
100 200 3
50 10 1
100 200 5
150 1 2

【样例输出1】

350

【样例说明1】

在这里插入图片描述

【样例2】

【样例输入2】

10
1000 10 9
1000 10 10
1000 10 2
1000 10 3
1000 10 4
1000 10 5
1000 10 6
1000 10 7
1000 10 8

【样例输出2】

90

【样例3】

【样例输入3】

6
1000000000 1000000000 1
1000000000 1000000000 1
1000000000 1000000000 1
1000000000 1000000000 1
1000000000 1000000000 1

【样例输出3】

5000000000

【解题思路】

老汉使用到的是Dijkstra+优先队列优化的解题方式

在这里插入图片描述

代码注释有详细过程

【代码】

package ABC340_D_SuperTakahashiBros;import java.util.*;public class Main {// 存放起始点到该点的最短时间static long[] dp;// 存放该下标对应点可直接到达的下一个点static int[][] ne;// 存放该下标对应点可直接到达的下一个点所需花费的时间static int[][] val;// 点的个数static int n;public static void main(String[] args) {Scanner scan = new Scanner(System.in);n = scan.nextInt();// ne[i][0]代表i的下一点i+1,ne[i][1]代表可以直接到达的另一个点ne = new int[n][2];// 对应ne所需花费的时间val = new int[n][2];dp = new long[n];// 为ne、val数组赋值,起始点为0for (int i = 0; i < n - 1; i++) {int v1 = scan.nextInt();int v2 = scan.nextInt();int c = scan.nextInt() - 1;ne[i][0] = i + 1;ne[i][1] = c;val[i][0] = v1;val[i][1] = v2;}// 将dp赋值为long最大值Arrays.fill(dp, Long.MAX_VALUE);// 起始点到起始点花费最短时间为0dp[0] = 0;// 利用优先队列优化dij,本题求最小值,采用小根排序,降低时间复杂化度为O(nlogn)PriorityQueue<Node> set = new PriorityQueue<>(new Comparator<Node>() {@Overridepublic int compare(Node o1, Node o2) {if (o1.val > o2.val) {return 1;} else if (o1.val == o2.val) {return 0;} else {return -1;}}});// 向队列添加起始点0set.add(new Node(0, 0));// dij求最短路径while (!set.isEmpty()) {Node cur = set.poll();for (int i = 0; i < 2; i++) {int n = ne[cur.nx][i];int v = val[cur.nx][i];if (dp[n] > cur.val + v) {dp[n] = cur.val + v;set.add(new Node(dp[n], n));}}}// 输出1~n即下标0~n-1的最短用时System.out.println(dp[n - 1]);scan.close();}public static class Node {// 从起点到当前点的最短用时long val;// 可直接到达的下一点int nx;public Node(long val, int nx) {this.val = val;this.nx = nx;}}
}

这篇关于Atcoder ABC340 D - Super Takahashi Bros.的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728932

相关文章

问:Super与this在Java中有什么区别?

this: this 关键字用于引用当前对象。它通常用于区分成员变量和方法参数或局部变量。在实例方法中,this 指向调用该方法的对象。在构造函数中,this 指向正在被初始化的对象。 super: super 关键字用于引用父类(超类)的构造函数、方法或变量。在子类的构造函数中,super() 用于调用父类的构造函数。在子类的方法中,super.methodName() 用于调用父类的方法。

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

MTK Android P/Q system/vendor/super快速打包

一、Android 新版本默认开启了动态分区,把system vendor  product等分区打包成一个super分区。这对于我们使用替换分区的方法来排查问题不是很方便,直接替换一个super也不知道到底是哪个部分导致的。所以我们需要自己制作super.img来缩小范围。下面讲讲如何快速生成system、vendor、super,以及vbmeta(校验image,不匹配可能会导致不开机) 二

? extends T 和 ? super T分别是什么意思?有什么不同?

<? extends T>首先你很容易误解它为继承于T的所有类的集合,这是大错特错的,相信能看下去你一定见过或用过List<? extends T>吧?为什么我说理解成一个集合是错呢?如果理解成一个集合那为什么不用List<T>来表示?所以<? extends T>不是一个集合,而是T的某一种子类的意思,记住是一种,单一的一种,问题来了,由于连哪一种都不确定,带来了不确定性,所以是不可能通过add

java基础总结11-面向对象7(super关键字)

在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用。 1 super关键字测试 package cn.galc.test;/*** 父类* @autho

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

【大数据Java基础-JAVA 面向对象14】面向对象的特征二:继承性 (三) 关键字:super以及子类对象实例化全过程

关键字:super 1.super 关键字可以理解为:父类的 2.可以用来调用的结构: 属性、方法、构造器 3.super调用属性、方法: 3.1 我们可以在子类的方法或构造器中。通过使用"super.属性"或"super.方法"的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯省略"super." 3.2 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类

【BNU】33943 Super Rooks on Chessboard 【FFT】

【BNU】33943 Super Rooks on Chessboard UVA上的题,然而我怎么会蠢到去UVA呢!(其实是百度首先跳出来的是BNU → \to_ → \to) 题目分析: 设 numx numx为 N N个车没有覆盖的行数,numynumy为 N N个车没有覆盖的列数。 首先我们考虑没有主对角线覆盖这一条件时,总共的没有被覆盖的面积就是numx∗numynumx \ast

Super Pow

Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array. Example1: a = 2b = [3]Result: 8 Example2: a = 2