• HPU 1413 StarFarming (最短路)


    1413: StarFarming [最短路]

    题目链接
    时间限制: 1 Sec 内存限制: 128 MB

    河南省多校连萌(三)

    题目描述
    星农(StarFarming)公司计划要给员工发路费津贴,发放的规则是这样的:1到n-1代表各个员工家的序号,n代表公司。路费津贴只发给上班的最短路与回家的最短路的总路程最长的人。该市的路建造的有些奇怪,修路只修单行道,即只允许往某一个方向通行。

    现在给你城市的有向图的地图,TLG请你帮忙计算谁能得到津贴,以及他上班和回家的总路程是多少。

    输入
    有多组测试数据。

    每组第一行输入两个整数N,M。表示点的个数,与单行道的数量(可能有重复)

    接下来m行,每行输入三个整数x,y,z。表示从x到y城市有一条单行道,距离为z。

    题目保证至少一人存在来回的路径。不存在的不发津贴(班都没法好好上还想要钱?!)

    1≤N≤10001≤N≤1000
    1≤M≤1000001≤M≤100000
    1≤x,y≤N1≤x,y≤N
    1≤z≤2001≤z≤200
    输出
    对于每组数据,输出两个整数,分别表示获得津贴的人的序号以及总路程。(如果有多个人路程相同,取序号最小的)

    样例输入
    4 7
    1 2 2
    2 3 2
    1 3 4
    4 1 2
    4 2 2
    3 4 1
    4 3 5
    样例输出
    1 7
    提示
    对于样例,

    1来回需要的最短路程是7:1->2->3->4->1

    2来回需要的最短路程是5:2->3->4->2

    3来回需要的最短路程是5:3->4->2->3

    所以输出1 7

    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int inf=0x3f3f3f3f;
    int mapp[1005][1005];
    int dis[2][1005];
    int n;
    struct node
    {
        int st,length;
        bool friend operator < (node a,node b)
        {
            return a.length>b.length;
        }
    }as,t;
    void dijkstra1()//从公司到家
    {
        int state[1005];
        memset(state,0,sizeof(state));
        priority_queue<node>q;
        as.st=n;
        as.length=0;
        q.push(as);
        while(!q.empty())
        {
            t=q.top();
            q.pop();
            if(state[t.st])
                continue;
            state[t.st]=1;
            for(int i=1;i<n;i++)
            {
                if(mapp[t.st][i]!=inf)
                {
                    as.st=i;
                    as.length=t.length+mapp[t.st][i];
                    if(as.length<dis[0][as.st])
                    {
                        dis[0][as.st]=as.length;
                        q.push(as);
                    }
                }
            }
        }
    }
    void dijkstral0()//从家到公司
    {
        int state[1005];
        memset(state,0,sizeof(state));
        priority_queue<node>q;
        as.st=n;
        as.length=0;
        q.push(as);
        while(!q.empty())
        {
            t=q.top();
            q.pop();
            if(state[t.st])
                continue;
            state[t.st]=1;
            for(int i=1;i<n;i++)
            {
                if(mapp[i][t.st]!=inf)
                {
                    as.st=i;
                    as.length=t.length+mapp[i][t.st];
                    if(as.length<dis[1][as.st])
                    {
                        dis[1][as.st]=as.length;
                        q.push(as);
                    }
                }
            }
        }
    }
    int main()
    {
        int m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(mapp,inf,sizeof(mapp));
            memset(dis,inf,sizeof(dis));
            for(int i=1;i<=m;i++)
            {
                int x,y,z;
                scanf("%d%d%d",&x,&y,&z);
                mapp[x][y]=min(mapp[x][y],z);
            }
            dijkstra1();
            dijkstral0();
            int ans=0;
            int num;
            for(int i=1;i<n;i++)
            {
                if(dis[0][i]==inf||dis[1][i]==inf)
                    continue;
                if(dis[0][i]+dis[1][i]>ans)
                    num=i,ans=dis[0][i]+dis[1][i];
            }
            printf("%d %d
    ",num,ans);
        }
        return 0;
    }
    
  • 相关阅读:
    区块链,去中心化应用基本知识与开发实践学习
    服务铝料门窗基本资料
    微信小游戏发布注意事项
    2018阿里云短信发送DEMO接入简单实例
    #SQL1242错误
    百度站内搜索
    jqGrid 手册
    4步 —— 快速开始运行直播小程序
    数字平滑 前端插件JS&CSS库
    jqGrid 中文配置
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7900067.html
Copyright © 2020-2023  润新知