1003 Emergency

本文介绍了一个使用迪杰斯特拉算法求解两个城市间最短路径的问题,并通过递归方法找到可能的最大团队数及对应的最短路径数量。文章提供了一段Java实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1003 Emergency

1549560-20190328214958595-695087750.png

java代码提交注意点

1. 类名改为Main

2. 不要有package

题目注意点

1. 考虑出发城市和目的城市相同!!!

总体思路

  1. 用迪杰斯特拉算法求出发城市到目的城市之间的最短距离(不需要走完全部的过程,一旦求出两者之间的最短距离就可以break)
  2. 使用递归遍历所有路径(条件:路径和必须<=min<出发,目的>,否则不递归),递归的出口是顶点为终点时候

java代码

import java.util.HashSet;
import java.util.Scanner;

public class A1003 {

    int cityNum;
    int[][] map; // 地图
    int[] teamNum;
    int startCity;
    int endCity;
    int value; //最短路径
    int ways = 0; //最短路数
    int maxTeam = 0; //最大团队数

    A1003(int length, int startCity, int endCity) {
        this.cityNum = length;
        this.startCity = startCity;
        this.endCity = endCity;
        teamNum = new int[length];
        map = new int[length][length];
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length; j++) {
                map[i][j] = 0;
            }
        }
    }

    void getMinDistance() {
        int startPoint = startCity;
        int[] path = new int[cityNum];
        int[] values = new int[cityNum];
        int[] help = new int[cityNum];
        for (int i = 0; i < cityNum; i++) {
            values[i] = Integer.MAX_VALUE;
            help[i] = 0;
        }
        path[startPoint] = startPoint;
        help[startPoint] = 1;
        values[startPoint] = 0;
        while (true) {
            for (int i = 0; i < cityNum; i++) {
                if (map[startPoint][i] != 0) {
                    if (map[startPoint][i] + values[startPoint] < values[i]) {
                        values[i] = map[startPoint][i] + values[startPoint];
                        path[i] = startPoint;
                    }
                }
            }
            int min = Integer.MAX_VALUE;
            int index = -1;
            for (int i = 0; i < cityNum; i++) {
                if (help[i] != 1) {
                    if (values[i] < min) {
                        min = values[i];
                        index = i;
                    }
                }
            }
            if (index == endCity) {
                this.value = min;
                break;
            }
            help[index] = 1;
            startPoint = index;
        }
    }

    void dfs(int index, int teams, int values, HashSet<Integer> set) {
        if (index == this.endCity) {
            if (teams > this.maxTeam) {
                maxTeam = teams;
            }
            this.ways++;
            return;
        }
        for (int i = 0; i < this.cityNum; i++) {
            if (this.map[index][i] != 0 && !set.contains(i)) {
                if (values + this.map[index][i] <= this.value) {
                    HashSet<Integer> set1 = (HashSet<Integer>) set.clone();
                    set1.add(i);
                    dfs(i, teams + this.teamNum[i], values + this.map[index][i], set1);
                }
            }
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int cityNum = in.nextInt();
        int roadNum = in.nextInt();
        A1003 a1003 = new A1003(cityNum, in.nextInt(), in.nextInt());
        for(int i=0;i<cityNum;i++){
            a1003.teamNum[i] = in.nextInt();
        }
        for(int i=0;i<roadNum;i++){
            int row = in.nextInt();
            int col = in.nextInt();
            int value = in.nextInt();
            a1003.map[row][col] = value;
            a1003.map[col][row] = value;
        }
        if(a1003.startCity == a1003.endCity) {
            System.out.println(1 + " " + a1003.teamNum[a1003.startCity]);
        }else {
            a1003.getMinDistance();
            HashSet<Integer> set = new HashSet<Integer>();
            set.add(a1003.startCity);
            a1003.dfs(a1003.startCity, a1003.teamNum[a1003.startCity], 0, set);
            System.out.println(a1003.ways + " " + a1003.maxTeam);
        }
        in.close();
    }
}

转载于:https://www.cnblogs.com/d-i-p/p/10618007.html

内容概要:本文深入探讨了DevOps流程落地中自动化测试与监控体系的构建,强调二者是保障软件质量和系统稳定性的重要支柱。自动化测试涵盖从单元测试到端到端测试的全流程自动化,而监控体系则通过实时采集和分析系统数据,及时发现并解决问题。文章介绍了测试金字塔模型的应用、监控指标的分层设计、测试与生产环境的一致性构建以及告警策略的精细化设置等核心技巧。此外,还提供了基于Python和Prometheus的具体代码案例,包括自动化接口测试脚本和监控指标暴露的实现,展示了如何在实际项目中应用这些技术和方法。 适合人群:对DevOps有一定了解,从事软件开发、运维或测试工作的技术人员,特别是那些希望提升自动化测试和监控能力的从业者。 使用场景及目标:①高并发业务系统中,模拟大规模用户请求,验证系统抗压能力和稳定性;②关键业务流程保障,确保金融交易、医疗数据处理等敏感业务的合规性和可追溯性;③微服务架构系统下,通过契约测试和分布式链路追踪,保证服务间的兼容性和故障快速定位。 阅读建议:本文不仅提供了理论指导,还有详细的代码示例,建议读者结合自身项目的实际情况,逐步实践文中提到的技术和方法,特别是在构建自动化测试框架和监控系统时,关注环境一致性、测试覆盖率和性能指标等方面。
内容概要:该论文针对电熔镁砂熔炼过程的强非线性特性,提出了一种带输出补偿的PID控制方法。电熔镁炉以三相电机转动方向和频率为输入,三相电极电流为输出,模型参数如埋弧电阻率、熔池电阻率和高度会随熔炼过程变化。作者采用线性模型加未知高阶非线性项描述系统,设计了消除非线性项及其变化率的补偿器,结合一步最优前馈控制律和调节律确定PID参数。仿真和工业应用表明,该方法能在动态特性随机变化时,将电流跟踪误差控制在目标范围内。论文还详细介绍了控制器的设计、实现及仿真验证过程,包括非线性补偿、抗积分饱和、自适应补偿增益等改进措施,以及工业应用中的关键技术如参数辨识、安全保护机制等。 适用人群:具备一定自动化控制理论基础,从事工业控制系统设计与优化的研发人员和工程师。 使用场景及目标:①解决电熔镁砂熔炼过程中由于参数时变和非线性带来的控制难题;②提高电流控制精度,降低单吨能耗,提升生产效率和产品质量稳定性;③适用于类似强非线性、时变特性的工业过程控制领域。 其他说明:该控制方法通过系统性的非线性补偿设计和在线参数调整,相比传统PID控制,能显著降低电流跟踪误差,减少能耗。实际应用中需根据具体电熔镁炉特性调整模型参数和补偿系数,确保控制性能最优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值