【CodeForces - 707B】Bakery(思维水题)

本文介绍了一个关于面包店选址的问题,旨在寻找在给定条件下开设面包店的最佳位置,并计算从仓库到面包店的最小运输成本。文章通过分析城市间道路及仓库分布情况,提出了一种有效的算法解决方案。

Bakery

Descriptions

玛莎想在从1到n的n个城市中开一家自己的面包店,在其中一个城市烘焙松饼。

为了在她的面包房烘焙松饼,玛莎需要从一些储存的地方建立面粉供应。只有k个仓库,位于不同的城市编号为a1, a2,…,ak。

不幸的是,玛莎居住的那个国家的法律禁止在任何一个有仓库的城市开设面包店。她只能在另一个n - k城市中的一个开这家店,当然,面粉配送也要付费——从仓库到面包房每走一公里,玛莎就得支付1卢布。

形式上,玛莎将支付x卢布,如果她将打开面包店在一些城市b (ai≠b每1≤≤k),选择一个存储在一些城市s (s = aj一些1≤j≤k)和b和s是连接道路的道路摘要长度的x(如果有多个路径,玛莎是能够选择应该使用)。

玛莎非常节俭和理性。她对一个城市感兴趣,在那里她可以开自己的面包店(在k个仓库中选择一个,在有面包店的城市和有仓库的城市之间选择一条道路),并为面粉配送支付尽可能少的卢布。请帮玛莎找到这笔钱。

Input

输入的第一行包含三个整数n, m和k(1≤n, m≤105,0≤k≤n)——玛莎居住的乡村城市数量,它们之间的道路数量,以及面粉库数量。

然后是m行。每一个包含u, v和l三个整数(1≤u, v≤n, 1≤l≤109,u≠v),表示u和v之间有一条长度为l公里的道路。

如果k >为0,那么输入的最后一行包含k个不同的整数a1 a2…, ak(1≤ai≤n)——有面粉仓库的城市数量。如果k = 0,则在输入中不显示这一行。

Output

印尽可能少的卢布,玛莎应该支付面粉运送在唯一的行。

如果面包店不能在n个城市中的任何一个开设(同时满足条件),请在唯一一行打印- 1。

Examples

Input
5 4 2
1 2 5
1 2 3
2 3 4
1 4 10
1 5
Output
3
Input
3 1 1
1 2 3
3
Note

    样例一示意图,暗色的是仓库,白色的是普通城市

    题目链接

    https://vjudge.net/problem/CodeForces-707B

    思维题

    城市1和城市5有仓库,那我们只需要考虑城市2和城市4,之所以不考虑城市3是因为仓库1到城市3必须要经过城市2,显然城市2比城市3离仓库1更近

    于是,我们只要把有仓库的城市标记,如果某条双向路一端连着有仓库的城市,另一端连着没有仓库的城市,那就把这条路的长度取来作比较,留下距离最短的路即可

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <fstream>
    #include <algorithm>
    #include <cmath>
    #include <deque>
    #include <vector>
    #include <queue>
    #include <string>
    #include <cstring>
    #include <map>
    #include <stack>
    #include <set>
    #include <sstream>
    #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
    #define Mod 1000000007
    #define eps 1e-6
    #define ll long long
    #define INF 0x3f3f3f3f
    #define MEM(x,y) memset(x,y,sizeof(x))
    #define Maxn 100000+5
    using namespace std;
    int n,m,k;
    int u[Maxn];//起点城市
    int v[Maxn];//终点城市
    int l[Maxn];//城市之间的距离
    int vis[Maxn];//vis[x]=1 x这个城市为仓库
    int main()
    {
        MEM(vis,0);//一开始都是城市
        cin>>n>>m>>k;
        for(int i=1; i<=m; i++)
            cin>>u[i]>>v[i]>>l[i];
        for(int i=1; i<=k; i++)//标记仓库
        {
            int x;
            cin>>x;
            vis[x]=1;
        }
        int ans=INF;
        for(int i=1; i<=m; i++)
        {
            if(!vis[u[i]]&&vis[v[i]]||!vis[v[i]]&&vis[u[i]])//一个城市为仓库,一个城市不是仓库,取中间距离
                ans=min(ans,l[i]);
        }
        if(ans!=INF)
            cout<<ans<<endl;
        else
            cout<<-1<<endl;
        return 0;
    }
    
    基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值