dlutoj 1081 巧斗雷震子

本文介绍了一个关于寻找从起点到终点经历最小雷劈伤害总和的算法问题。该问题在一个带有点权的图中进行,需考虑特殊点限制及使用IP卡抵消伤害等条件。采用优先队列实现广度优先搜索解决。

Description

因为下雨的关系,小朋友被困在综一了,W先生知道后,立即前往营救,一个N个点的图,一共M条边,边是双向的,但是因为下雨和打雷的关系,每个端点上都有雷震子镇守,想通过该点,必须被雷震子雷劈,每个雷震子都有一个雷劈伤害值,W先生很幸运,他有FIP(挨劈)卡,一张IP卡可以抵消一次雷劈伤害,但是有个要求,不能在XY点都使用IP卡,也就是在XY两点中的最多使用一张IP卡,W先生要从点前往 T点,又想自己的雷劈伤害值总和最小,现在W先生问你,他的最低的雷劈伤害值总和是多少。

Input

多组case,以eof结尾

第一行 N表示点的数量(N<=200),M表示边的数量(M<=N*N)

接下来M行,每行两个数 : 表示 u点和v点是连接的。

接下来 一行 个数 i个数 表示 i号点 雷震子的雷劈伤害值为 ci1<=ci<=1000

接下来 一行 :ST (1<=S,T<=N)

接下来 一行 :X , Y, F (1<=X<Y<=N, F<=50

Output

每个case输出一行,最低的雷劈伤害总和是多少。(当无法到达T时输出-1)。

Sample Input

5 41 22 33 44 51 5 4 9 11 52 4 2

Sample Output

7


最初看起来是一道最短路,仔细想了一想,因为是点上有权值而不是每条边有权值,
所以用优先队列的bfs做出来了。队列的元素是结构体,存当前节点和走到当前节点所用的权值。
先把起点放入队列,把与起点相连的所有点全部加上权值放入队列。
由于每次队列顶都是权值最小的,所以该点能走到的节点一定不会有其他点能走到且比当前点更短。
因为这个所以我们可以bfs。
每次加入一个节点,都用一个数组把当前节点的前驱记录下来。
最后从终点遍历,记录走过路径所经过的节点,
把最大的F个点去掉(注意X,Y的处理),其余点的权值之和就是所求的答案。

#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=205;
bool ok[maxn][maxn],OK[maxn];
int a[maxn],c[maxn];
int N,M,S,T,X,Y,F;
struct xx
{
    int i,n;
    friend bool operator < (xx a,xx b)
    {
        return a.n>b.n;
    }
};
bool cmp(int i,int j)
{
    return a[i]>a[j];
}
int main()
{
    while(cin>>N>>M)
    {
        int i,j,ans=0;
        bool ok1=1;
        priority_queue<xx>bfs;
        memset(ok,0,sizeof(ok));
        memset(a,0,sizeof(a));
        memset(c,0,sizeof(c));
        memset(OK,0,sizeof(OK));
        while(M--)
        {
            int u,v;
            cin>>u>>v;
            ok[u][v]=ok[v][u]=1;
        }
        for(i=1;i<=N;++i)
            cin>>a[i];
        cin>>S>>T>>X>>Y>>F;
        bfs.push((xx){S,0});
        while(!bfs.empty())
        {
            int i=bfs.top().i,n=bfs.top().n;
            bfs.pop();
            for(int k=1;k<=N;++k)
                if(ok[i][k]&&!OK[k])
            {
                OK[k]=1;
                bfs.push((xx){k,n+a[k]});
                c[k]=i;
            }
        }
        i=T;
        int o=0;
        int XX[maxn];
        XX[o++]=T;
        while(i!=S)
        {
            XX[o++]=c[i];
            i=c[i];
        }
        sort(XX,XX+o,cmp);
        for(i=0;i<o;++i)
        {
            if((XX[i]==X||XX[i]==Y)&&ok1)
            {
                ok1=0; F--;
            }
            else if((XX[i]==X||XX[i]==Y)&&ok1==0)
            {
                ans+=a[XX[i]];
            }
            else if(F)
            {
                F--;
            }
            else ans+=a[XX[i]];
        }
        cout<<ans<<endl;
    }
    return 0;
}







内容概要:本文档为《【顶刊复现】配电网两阶段鲁棒故障恢复研究(Matlab代码实现)》的技术资料汇总,聚焦电力系统中配电网在故障条件下的快速恢复问题,提出一种基于两阶段鲁棒优化的故障恢复模型。该模型在第一阶段制定预恢复策略,在第二阶段根据实际不确定性(如负荷波动、分布式电源出力波动)进行动态调整,从而增强系统应对突发故障的鲁棒性与恢复能力。研究完整实现了Matlab代码仿真,并融合Benders分解、混合整数线性规划(MILP)建模及YALMIP工具包调用等关键技术,具备较强的工程复现价值。文档还附带多个前沿科研方向资源,涵盖微电网优化、储能配置、电动汽车调度、风光制氢合成氨系统、无人机路径规划及机器学习预测等领域,形成综合性科研支持体系。所有资源通过指定网盘链接与微信公众号统一提供。; 适合人群:具备电力系统、自动化、电气工程或相关专业背景,熟悉Matlab/Simulink仿真环境,有一定优化算法基础的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习并复现顶刊级别的配电网故障恢复优化模型;② 掌握两阶段鲁棒优化在电力系统不确定性建模中的应用方法;③ 深入理解Benders分解、MILP建模、YALMIP工具包调用等核心技术;④ 拓展至微电网调度、综合能源系统优化、储能配置等相关课题的研究与仿真。; 阅读建议:建议读者结合文档中提供的网盘资源与代码实例,按主题分类系统学习,优先掌握两阶段鲁棒优化的核心建模思路,并借助Matlab平台动手实践,调试代码以加深对算法流程与参数设置的理解。同时可参考文中列出的同类研究方向,拓展科研视野。
下载代码方式:https://pan.quark.cn/s/9302347a1da6 一、项目概述 本系统是一个采用SSM框架构建的影院购票平台,亦称为影院售票平台或网络电影订购系统,主要面向计算机相关学科进行毕业设计的学子以及寻求项目实践操作的Java学习者。内容涵盖:项目源代码、项目相关文档、数据库构建脚本、所需软件工具等,该项目提供完整源代码可供毕业设计选用。所有项目均已执行严密调试,保证其可执行性!该系统具备完备的功能、视觉设计优雅、操作流程直观、功能覆盖全面、管理功能高效,展现出较高的实用应用潜力。 二、技术架构 后端架构:Spring框架、SpringMVC框架、MyBatis持久层框架 UI设计:BootStrap前端框架、jQuery交互库、JSP动态页面技术 ​ 数据存储:MySQL关系型数据库 三、系统构成 系统划分为前端订票模块与后台管理模块: 1. 前端订票模块 包含:用户注册流程、用户身份验证、电影目录浏览、按类别筛选电影、电影检索功能、电影详细信息展示、电影评论发布 在线购票流程、在线支付处理、个人账户中心、订单记录查阅 2. 后台管理模块 管理员功能:记录添加、记录列表展示、信息修改、记录删除、信息检索 用户数据管理:记录列表展示、记录删除、信息检索 公告信息管理:记录添加、记录列表展示、信息修改、记录删除、信息检索 电影分类管理:记录添加、记录列表展示、信息修改、记录删除、信息检索 地区信息管理:记录添加、记录列表展示、信息修改、记录删除、信息检索 影院设施管理:记录添加、记录列表展示、信息修改、记录删除、信息检索 电影内容管理:记录添加、记录列表展示、信息修改、记录删除、信息检索 订单记录管理:记录列表展示、信息修改、记录删除...
内容概要:本文档是《可扩展主机控制器接口用于通用串行总线(xHCI)需求规范》1.1版本,发布于2017年11月,主要定义了支持USB 2.0及以上版本的xHCI寄存器级主机控制器接口标准。文档详细描述了系统软件与主机控制器硬件之间的软硬件接口,涵盖架构概述、数据结构、命令接口、操作模型、电源管理、虚拟化支持以及调试能力等内容。核心包括设备上下文、传输请求块(TRB)、命令环、事件环、端点管理、流支持、带宽管理和中断机制等关键技术的设计与实现。此外,文档还规定了xHCI在PCI环境下的配置空间、电源管理能力和扩展能力机制,适用于现代高性能USB主机控制器的设计与驱动开发。; 适合人群:从事USB主机控制器硬件设计、系统固件开发、操作系统驱动程序开发以及虚拟化环境中设备直通技术研究的工程师和技术人员,尤其适合具备计算机体系结构和外设接口基础知识的专业人员。; 使用场景及目标:①指导xHCI兼容主控芯片的硬件设计与验证;②为操作系统开发符合规范的USB主机控制器驱动提供依据;③支持虚拟化环境下USB设备的安全隔离与高效共享;④实现低功耗状态切换与带宽动态协商以优化系统能效。; 阅读建议:本规范技术细节密集,建议结合USB协议基础进行研读,重点关注数据结构布局、状态机转换流程及寄存器访问规则,同时参考附录中的实例图示以加深理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值