首页 > 其他分享 >AcWing 1126. 最小花费 (从终点方向求的dij -> 注意本题这么求就必须判断两点之间是否有边

AcWing 1126. 最小花费 (从终点方向求的dij -> 注意本题这么求就必须判断两点之间是否有边

时间:2023-11-26 14:46:08浏览次数:33  
标签:10 Scanner dij int 1126 static sc new AcWing

package 算法提高课;

import java.util.Arrays;
import java.util.Scanner;

public class acw1126 {

    static int n, m;
    static int[][] g;
    static double[] d;
    static boolean[] st;

    private static void init() {
        g = new int[n + 10][n + 10];
        st = new boolean[n + 10];
        d = new double[n + 10];
        for (int i = 1; i <= n; i ++ ) Arrays.fill(g[i], 0x3f3f3f3f);
    }

    private static double dij(int a, int b) {
        Arrays.fill(d, 0x3f3f3f3f);

        d[b] = 100;
        for (int i = 1; i <= n; i ++ ) {
            int t = -1;
            for (int j = 1; j <= n; j ++ )
                if (!st[j] && (t == -1 || d[t] > d[j])) t = j;

            st[t] = true;
            for (int j = 1; j <= n; j ++ ) {
                if (g[t][j] == 0x3f3f3f3f || t == j) continue;
                d[j] = Math.min(d[j], d[t] / (1.0 - g[t][j] / 100.0));
            }

//            System.out.println("debug -> d[2] : " + d[1] + " i : " + i);
        }

        return d[a];
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        n = sc.nextInt(); m = sc.nextInt();
        init();

        for (int i = 1; i <= m; i ++ ) {
            int x = sc.nextInt(), y = sc.nextInt(), w = sc.nextInt();
            g[x][y] = g[y][x] = Math.min(g[x][y], w);
        }

        int a = sc.nextInt(), b = sc.nextInt();
        System.out.printf("%.8f\n", dij(a, b));

//        for (int i = 1; i <= n; i ++ ) {
//            System.out.println("debug -> i : " + i + " d : " + d[i]);
//        }
    }
}

标签:10,Scanner,dij,int,1126,static,sc,new,AcWing
From: https://www.cnblogs.com/llihaotian666/p/17857182.html

相关文章

  • AcWing 1127. 香甜的黄油 (dij板子不能背太死, 需要知道含义灵活变通
    package算法提高课;importjava.util.Arrays;importjava.util.PriorityQueue;importjava.util.Scanner;publicclassacw1127{staticintn,p,c;staticint[]id;staticint[]h,e,ne,w;staticboolean[]st;staticint[]d;static......
  • AcWing 167. 木棒 (剪枝非常多的一道搜索题
    package算法提高课;importjava.util.Arrays;importjava.util.Scanner;publicclassacw167{staticint[]w;staticboolean[]st;staticintsum,len,n;/***本题剪枝比较多光介绍一下,本代码注释光介绍一下剪枝的大概思路,如果有遗忘或......
  • AcWing 1129. 热浪 (dij板子题
    package算法提高课;importjava.util.Arrays;importjava.util.PriorityQueue;importjava.util.Scanner;publicclassacw1129{staticclassPIIimplementsComparable{intdis,tar;//tar表示我这条边的入弧,dis表示我这条边的距离publicP......
  • AcWing 1128. 信使 (dij板子题 + 求花费最大的那个点的花费
    package算法提高课;importjava.util.Arrays;importjava.util.PriorityQueue;importjava.util.Scanner;publicclassacw1128{staticintn,m;staticint[]h,e,w,ne;staticint[]d;staticboolean[]st;staticintidx;staticclas......
  • AcWing 蓝桥杯 3994. 阿坤老师的独特瓷器 (非常经典俄罗斯套娃问题
    package蓝桥杯;importjava.util.Arrays;importjava.util.Scanner;publicclasslanqiao3994{/***思路:*固定套路了感觉,先按直径从大到小排,然后直径相同的再按高度从小到大排*然后从前往后遍历的时候就可以在一定存在更大d的前......
  • AcWing 3305. 作物杂交 (spfa建边变形版本
    package蓝桥杯;importjava.util.Arrays;importjava.util.LinkedList;importjava.util.Queue;importjava.util.Scanner;publicclasslanqiao1443{staticfinalintN=2010,M=2*100010;staticint[]h,e,ne,w,target;staticint[]dist;......
  • AcWing 903. 昂贵的聘礼 (超级源点 + 等级限制 + 抽象建图
    package算法提高课;importjava.util.Arrays;importjava.util.Scanner;publicclassacw903{staticintm,n;staticint[]dis,level;staticboolean[]st;staticint[][]g;/**思路:首先用到了虚拟源点,加入了等级限制*......
  • 20231126GESP三级笔记
    逛商场点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;intn,a[N],x,ans=0;intmain(){cin>>n;for(inti=1;i<=n;i++)cin>>a[i];cin>>x;for(inti=1;i<=n;i++){if(a[i]<=......
  • 对acwing193的解释
    首先是估价函数的解释由于\(x\)较大,所以\(x\)一直平方是最快的能到达\(p\)及以上的方法,所以这个估价函数比实际代价小(或等)再看\(gcd\)这个剪枝把八种情况列出,如果\(x\)和\(y\)都是\(gcd=d\)的倍数,那么加减或翻倍之后的新的\(x\)和\(y\)一定也是\(d\)的倍数,所以可以剪枝......
  • Dijkstra 算法python版
    算法策略Dijkstra算法是求一个图中一个点到其他所有点的最短路径的算法,先了解图的数据结构「邻接矩阵」Dijkstra算法是一个基于「贪心」、「广度优先搜索」、「动态规划」求一个图中一个点到其他所有点的最短路径的算法,时间复杂度O(n2)B站视频:https://www.bilibili.com/vide......