/**
题意:
    给你两个城市之间的道路(无向图),求出需要的
    电缆。如果大于所提供的,就输出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. C# 霍夫曼二叉树压缩算法实现

    知道有的人比较懒,直接贴全部代码. 一开始一次性Code完了压缩部分代码.只调试了2,3次就成功了. 一次性写150行代码,没遇到什么bug的感觉还是蛮爽的. 写解压代码,才发现压缩代码有些细节问题. ...

  2. StringHelper类,内容截取,特别适合资讯展示列表

    public class StringHelper    {        /// <summary>        /// 截字符串        /// </summary> ...

  3. OpenCart 之registry功用

    1. “Registry”设计模式 在OpenCart中,Registry是整个系统的信息中枢. Registry是一个单例(Singleton),在index.php起始页面中, 首先作为构造函数参 ...

  4. CSRF 攻击的应对之道

    转载自imb文库 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在 ...

  5. .net版ckeditor配置水印功能(转)

    本文简单讲解ckfinder控件给上图片加水印效果. 1.将ckfinder/plugins/watermark/bin/Debug目录下的CKFinder_Watermark.dll和CKFinde ...

  6. JS入门笔记

    DOM有四种节点: 1. 元素节点:即标签2. 属性节点:写在标签里的属性3. 文本节点:嵌在元素节点里展示出来的文本4. 文档节点:document 获取元素节点的三种常用方法: 1.ById 2. ...

  7. 安卓学习之ListView和GridView

    ListView 和 GridView是安卓中显示信息的两个很基本也最常用的控件.他们的用法很相似,但是他俩也是有区别的. ListView显示的数据会将他的item放在一行显示,而且根据内容给出it ...

  8. 【POJ3237】【树链剖分】Tree

    Description You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edg ...

  9. 用jQuery实现瀑布流效果学习笔记

    jQuery一直没系统的学,只知道是js库,封装了好多js函数,方便了开发.以前做过一个原生的图片网站瀑布流效果,超级麻烦,这次用了jQuery方法,瞬间代码浓缩了,只有56行js代码.神奇的让我来把 ...

  10. echshop jquery与transpart冲突解决?

    <script type="text/javascript">$(function() {window.__Object_toJSONString = Object.p ...