• 题目1417:变形金刚


    题目描述:

    看过变形金刚的人一定记得这样一个场景,机器人在攻击人类的时候,可以上天入地,并且都如履平地。

    聪明的人类很快就想到,可不可以也利用地下的攻势来跟机器人进行周旋。很快,人类就在地下建立了几个基地。现在这些基地之间要进行合作,必须有一些基地之间是有通道的,这样无论是运输补给还是进行交流都会方便很多。在每两个基地之间都建立一个通道,这是一个好的方法,基地之间的交流会变得极其方便。但是,同时要考虑到修地下通道所花的人力、物力、以及时间。现在时间很紧迫,必须选择一些通道来进行修建。根据对地形的分析及研究,人类确定了一些适合修建的备选通道。相信聪明的你很快会想到,这些通道也不用全部都修建,只要修建一些通道,使得任意两个基地之间都互相可达就可以了。通道修好后,还有最后一项工作要做,就是在每条修好的通道之间都铺设一段铁轨,铁轨需要的费用与通道的长度相同。同时,跟现实中的铁路不同,地下的铁路每次只能买一批固定长度的钢轨,每条通道用一条钢轨,如果钢轨的长度大于通道的长度,剩下的丢弃即可。现在人类将确定的备选通道的数目,每条通道连接的两个基地名称,以及这条通道的长度告诉你。请问购买的这一批钢轨的长度最短要多长才能满足要求?

    输入:

    输入的第一行包括基地的个数n(1<=n<=100),以及备选通道的个数m(1<=m<=10000)。

    接下来的m行,每行代表一个备选通道,其中包括两个字符串base1及base2,代表两个基地的名称(字符串的长度1<=len<=100),以及一个整数w(1<=w<=10000000),代表这两个基地之间的距离。 

    输出:

    输出购买的这一批钢轨的长度最短需要的长度。如果题目中给出的备选通道,不论你怎么选择,都不能使任意两个基地之间可以互相可达,那么请输出 “My God” 即可。

    样例输入:
    5 8
    a b 2
    a c 3
    b d 4
    a d 2
    b c 1
    d e 3
    a e 2
    c e 5
    5 5
    a c 3
    a d 2
    d e 3
    a e 2
    c e 5
    
    样例输出:
    2
    My God
    
    提示:

    1.由于修建方案的不同,数据中给出的两个基地之间的距离可能有多个,取最短的那个即可。




    --------------------------------------------------------------------------------------------------------------------------

    思想:因为输入的是字符串,所以应该把字符串与Tree数组下标结合起来,所以使用map恰到好处。把基地的“名称”从字符串装换为整型变得好处理后,问题就很常规了。


    Code:
    #include <iostream>
    #include <algorithm>
    #include <map>
     
    using namespace std;
     
    struct Station{
        string base1;
        string base2;
        int int_base1;
        int int_base2;
        int cost;
    };
     
    map<string,int> baseTransfer;
    Station base[10010];
    int Tree[110];
     
    void initTree(int length){
        for(int i=0;i<=length;++i)
            Tree[i]=-1;
    }
     
    int find_Root(int x){
        if(Tree[x]==-1)
            return x;
        else{
            int tmp=find_Root(Tree[x]);
            Tree[x]=tmp;
            return tmp;
        }
    }
     
    bool cmp(Station a,Station b){
        return a.cost<=b.cost;
    }
     
    int main()
    {
       int n,m,index;
       while(cin>>n>>m){
            baseTransfer.clear();
            index=1;
            for(int i=0;i<m;++i){
                cin>>base[i].base1>>base[i].base2>>base[i].cost;
                if(baseTransfer.find(base[i].base1)==baseTransfer.end())
                    baseTransfer.insert(make_pair(base[i].base1,index++));
                if(baseTransfer.find(base[i].base2)==baseTransfer.end())
                    baseTransfer.insert(make_pair(base[i].base2,index++));
            }
            for(int i=0;i<m;++i){
                base[i].int_base1=baseTransfer[base[i].base1];
                base[i].int_base2=baseTransfer[base[i].base2];
            }
            if(baseTransfer.size()<(unsigned int)n){
                cout<<"My God"<<endl;
                continue;
            }
            initTree(n);
            sort(base,base+m,cmp);
            int maxlength=0;
            for(int i=0;i<m;++i){
                int root_a=find_Root(base[i].int_base1);
                int root_b=find_Root(base[i].int_base2);
                if(root_a!=root_b){
                    Tree[root_a]=root_b;
                    if(base[i].cost>maxlength)
                        maxlength=base[i].cost;
                }
            }
            int cnt=0;
            for(int i=1;i<=n;++i)
                if(Tree[i]==-1)
                    ++cnt;
            if(cnt==1)
                cout<<maxlength<<endl;
            else
                cout<<"My God"<<endl;
       }
       return 0;
    }
     
    /**************************************************************
        Problem: 1417
        User: lcyvino
        Language: C++
        Result: Accepted
        Time:330 ms
        Memory:3832 kb
    ****************************************************************/


     
  • 相关阅读:
    python学习笔记(五)
    python学习笔记(四)
    Jenkins学习系列——iOS打包任务的创建和配置
    Jenkins学习系列——jenkins平台搭建和配置
    java及java web学习笔记
    mac book下批量替换多个文件中的字符
    MAC的sed和GNU不一样
    python杂记
    appium ios环境搭建——iOS开发环境搭建
    ideviceinstaller报Segmentation fault: 11错误解决过程
  • 原文地址:https://www.cnblogs.com/Murcielago/p/4216441.html
Copyright © 2020-2023  润新知