zoukankan      html  css  js  c++  java
  • 牛客网 2018年全国多校算法寒假训练营练习比赛(第四场) B.道路建设-最小生成树(Prim)

    B.道路建设
     
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 65536K,其他语言131072K
    64bit IO Format: %lld

    题目描述

    随着如今社会的不断变化,交通问题也变得越来越重要,所以市长决定建设一些公路来方便各个城市之间的贸易和交易。虽然市长的想法很好,但是他也遇到了一般人也经常头疼的问题,那就是手头的经费有限……在规划过程中,设计师们已经预算出部分城市之间建设公路的经费需求。现在市长想知道,它能不能将他的m个城市在有限的经费内实现公路交通。如果可以的话,输出Yes,否则输出No(两个城市不一定要直接的公路相连,间接公路到达也可以。)

    输入描述:

    测试输入包含多条测试数据
    每个测试数据的第1行分别给出可用的经费c(<1000000),道路数目n(n<10000),以及城市数目m(<100)。
    接下来的n行给出建立公路的成本信息,每行给出三个整数,分别是相连的两个城市v1、v2(0<v1,v2<=m)以及建设公路所需的成本h(h<100)。

    输出描述:

    对每个测试用例,输出Yes或No。
    示例1

    输入

    20 10 5
    1 2 6
    1 3 3
    1 4 4
    1 5 5
    2 3 7
    2 4 7
    2 5 8
    3 4 6
    3 5 9
    4 5 2

    输出

    Yes
    示例2

    输入

    10 2 2
    1 2 5
    1 2 15

    输出

    Yes

    备注:

    两个城市之间可能存在多条线路



    这个题本咸鱼简直想打人,写了一直wa83.33%,要判断能不能生成树(判断的话就是看每个城市是不是都有路),然后再乱写才可以。。。

    我简直是个傻子,我发现我以前的板子都有毒,初始化都有问题(;д;),导致我一直都是wa83.33%,现在改好了。。。

    代码:

     1 //B-最小生成树
     2 #include<iostream>
     3 #include<cstring>
     4 #include<stdio.h>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<stdlib.h>
     8 using namespace std;
     9 const int N=100+10;
    10 const int INF=1e6+10;
    11 int  mp[N][N];
    12 int vis[N],dis[N];
    13 int n,u,v,w,money,m;
    14 void prim(){
    15     memset(vis,0,sizeof(vis));
    16     for(int i=1;i<=n;i++)dis[i]=mp[1][i];
    17     int pos=0;
    18     vis[1]=1;
    19     dis[1]=0;
    20     for(int i=1;i<=n-1;i++){
    21         int minn=INF;
    22         for(int j=1;j<=n;j++){
    23             if(!vis[j]&&minn>dis[j]){
    24                 pos=j;
    25                 minn=dis[j];
    26             }
    27         }
    28         vis[pos]=1;
    29         for(int j=1;j<=n;j++){
    30             if(!vis[j]&&dis[j]>mp[pos][j])dis[j]=mp[pos][j];
    31         }
    32     }
    33     int flag=0,ans=0;
    34     for(int i=1;i<=n;i++){
    35         if(dis[i]==INF)flag=1;
    36         ans+=dis[i];
    37     }
    38     if(ans>money)flag=1;
    39     if(flag==0)cout<<"Yes"<<endl;
    40     else cout<<"No"<<endl;
    41 }
    42 int main(){
    43     scanf("%d%d%d",&money,&m,&n);
    44         for(int i=1;i<=n;i++)
    45             for(int j=1;j<=n;j++)mp[i][j]=INF;
    46         for(int i=1;i<=m;i++){
    47             scanf("%d%d%d",&u,&v,&w);
    48             mp[u][v]=min(mp[u][v],w);          //因为没有方向,所以要这么写。
    49             mp[v][u]=w;
    50         }
    51         prim();
    52     return 0;
    53 }
    54 
    55 /*
    56 20 10 5
    57 1 2 6
    58 1 3 3
    59 1 4 4
    60 1 5 5
    61 2 3 7
    62 2 4 7
    63 2 5 8
    64 3 4 6
    65 3 5 9
    66 4 5 2
    67 */
  • 相关阅读:
    GhostBSD 3.0RC3,基于GNOME的FreeBSD
    Nagios 3.4.3 发布,企业级监控系统
    Jolokia 1.0.6 发布, JMX远程访问方法
    微软希望开发人员不要使 WebKit 成为新版 IE6
    Kwort Linux 3.5 正式版发布
    EJDB 1.0.24 发布,嵌入式 JSON 数据库引擎
    Pale Moon 15.3 Firefox“苍月”优化版发布
    Galera Load Balancer 0.8.1 发布
    SmartSVN V7.5 正式发布
    PostgresQL建立索引如何避免写数据锁定
  • 原文地址:https://www.cnblogs.com/ZERO-/p/9711277.html
Copyright © 2011-2022 走看看