/**
题意:
    给你两个城市之间的道路(无向图),求出需要的
    电缆。如果大于所提供的,就输出Not enough 。。。
    否则输出所需要的电缆长度。
 
    输入:N (给定的电缆总长度)
          m1 (有多少个城市—)
          str1
          str2
          str3
          str4
          :
          ;(城市的名字)
 
          m2(相当于给出m2条边)
          a  b  c (a城市到b城市的距离为c)
          :
          :
          :
          :
    输出:
         所需的最短长度   若大于给定的长度  输出 Not enough cable
 
分析: 简单的最小生成树+字符串处理
        用map容器映射处理简单
 
 
*/
 
 
#include<stdio.h>
#include<map>
#include<algorithm>
#include<string>
#include<string.h>
#include<iostream>
using namespace std;
const int MAX=1e4;///1*10 的4次方
int vest[MAX];
int n,m;
double leng=0;
map<string,int >mp;
struct node
{
    int u,v;
    double w;
} bian[MAX];
bool  cmp(node a,node b)
{
    return a.w<b.w;
}
void init(int n)
{
    for(int i=0; i<=n; i++)
        vest[i]=i;
}
int Find(int t)
{
        if(vest[t]==t)return t;
     return  Find(vest[t]);
 
}
bool merge(int a,int b)
{
    int x=Find(a);
    int y=Find(b);
    if(x!=y)
    {
        vest[x]=y;
        return true;
    }
    return false;
}
double Kruskal()
{
    double sum=0;
    int cnt=0;
    for(int i=0; i<m; i++)
    {
        if(merge(bian[i].u,bian[i].v))
        {
            sum+=bian[i].w;
            ++cnt;
        }
        if(cnt>=n-1)break;
    }
    return sum;
}
int main()
{
    scanf("%lf",&leng);
    {
 
        mp.clear();
        scanf("%d",&n);
        init(n);
        char a[25];
        int k=1;
        for(int i=0; i<n; i++)
        {
            scanf("%s",a);
            if(mp[a]==0)mp[a]=k++;///给第一次出现的城市编号
        }
        scanf("%d",&m);
        char b[25];
        double c;
        for(int i=0; i<m; i++)
        {
            scanf("%s%s%lf",a,b,&c);
            bian[i].u=mp[a];
            bian[i].v=mp[b];
            bian[i].w=c;
        }
        sort(bian,bian+m,cmp);
        double sum=Kruskal();
        if(sum>=leng)printf("Not enough cable\n");
        else printf("Need %.1lf miles of cable\n",sum);
    }
    return 0;
}

Tangled in Cables(Kruskal+map容器处理字符串)的更多相关文章

  1. CSU 1113 Updating a Dictionary(map容器应用)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...

  2. map容器

    map容器一般用于对字符串进行编号,主要用于建图方面,例如把城市名按数字进行编号 #include"stdio.h" #include"string.h" #i ...

  3. 小白鼠排队(map容器插入数据的四种方法)

    题目描述 N只小白鼠(1 <= N <= 100),每只鼠头上戴着一顶有颜色的帽子.现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色.帽子的颜色用“red”,“ ...

  4. BestCoder Round #92 1001 Skip the Class —— 字典树 or map容器

    题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=748&pid=1001 题解: 1.trie树 关 ...

  5. HDU 1113 Word Amalgamation (map 容器 + string容器)

    http://acm.hdu.edu.cn/showproblem.php?pid=1113 Problem Description In millions of newspapers across ...

  6. matlab map容器类型

    matlab map容器类型 map容器类型以及map类概述 map是将一个量映射到另一个量上,此是前面的量就是map的键(key),后面的量就是map的数据(value).map的键和对应的数据都储 ...

  7. map 容器的使用

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明    1   头文件   #include   <map> ...

  8. 一种map容器遍历的方法

    遍历算法是一种很常见而且非常重要的算法,我们用map容器的时候可能用的比较多的是查找,我今天才第一次要用到遍历.下面举个例子就知道了. map<string,string> mp; str ...

  9. stl之map容器的原理及应用

    容器的数据结构同样是采用红黑树进行管理,插入的元素健位不允许重复,所使用的节点元素的比较函数,只对元素的健值进行比较,元素的各项数据可通过健值检索出来.map容器是一种关联容器,实现了SortedAs ...

随机推荐

  1. retain two decimal digits.

    package kju.o; import static kju.print.Printer.*; import java.text.*; class MathDemo { public static ...

  2. xctool工具

    xctool [1]xctool的特性: 原文:http://www.infoq.com/cn/news/2013/05/Facebook-buck-xctool-build xctool是Faceb ...

  3. 了解负载均衡 会话保持 session同步(转)

    一,什么负载均衡 一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但是随着网站访问量和流量的快速增长,单台服务器受自身硬件条件的限制,很难承受这么大的访问量.在这种情 ...

  4. 泛型? extents super

    ?可以接受任何泛型集合,但是不能编辑集合值.所以一般只在方法参数中用 例子: ? extends Number  则类型只能是Number类的子孙类 ? super String  则类型只能是Str ...

  5. 人人网FED CSS编码前端开发规范

    文件相关规范 1.文件名必须由小写字母.数字.中划线-组成 2.文件必须用utf-8编码 3.文件引入可通过外联或内联方式引入: 3.1 外联方式:<link rel=”stylesheet” ...

  6. Android安装 sdk+jdk+Eclipse+Adt开发工具

    根据别人提供的手册和安装过程体验加以更新和详细描述 安装Android开发工具 开发Android应用程序的门坎并不高,因为Google已经为Android应用程序开发提供了免费而且跨平台的集成开发环 ...

  7. dedecms 修改标题长度可以修改数据库

    数据表为dede__archives 字段为title 首先要在 a.系统->系统基本参数->其它选项->文章标题长度 b.系统->SQL命令行工具 alter table # ...

  8. Linux系统上使用php获取apk信息

    最近在做一个apk商城,需要在用户上传了apk之后系统自动读取apk信息(包名,版本号等),后台语言使用的是php,需要php去调用系统的aapt命令去读取apk信息,在Linux系统上安装aapt的 ...

  9. [Android分享] 彻底理解ldpi、mdpi、hdpi、xhdpi、xxhdpi

    来自: http://www.eoeandroid.com/thread-565562-1-1.html?_dsign=42bed080 非常感谢楼主分享 这个问题我相信困惑了好多人包括很多老鸟,而且 ...

  10. HDU2602 (0-1背包问题)

      N - 01背包 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Descri ...