(补+改)~-5 公路村村通

7-5 公路村村通(30 分)
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。

输入格式:
输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。

输出格式:
输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。

输入样例:
6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3
输出样例:
12

这题我那时来不及做了...以我的水平,只会用邻接矩阵+dfs做

#include<cstdio>
#include<string>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;

const int mxn = 1105;
int a[mxn][mxn],n, book[mxn],mini = 999999, ext = 0;

void dfs(int c, int cnt, int num){
    if(num >= mini) return;
    if(cnt == n-1){
        ext = 1;
        //printf("%d %d ", mini,num);
        mini = num;
        return;
    }
    //book[c] = 1; //不能在这里标记,应该在函数外标记
    cnt++;
    for(int i = 1; i <=n ; i++){
        if(!book[i] && a[c][i] >= 1){
            //num += a[c][i];  //这里的num不能更新
            book[i] = 1;
            dfs(i, cnt, num + a[c][i]);
            book[i] = 0;
        }
    }
}

int main(){
    int num1,num2,price,road;
    scanf("%d %d", &n,&road);
    memset(a, -1, sizeof(a));
    while(road--){
        scanf("%d %d %d", &num1, &num2, &price);
        a[num1][num2] = price;
        a[num2][num1] = price;
    }
    
    for(int i = 1; i <= n; i++){
        a[i][i] = 0;
    }
    
    for(int i = 1; i <= n; i++){
        memset(book,0,sizeof(book));
        book[i] = 1;
        dfs(i , 0, 0);
    }
    if(ext) printf("%d", mini);
    else    printf("-1");
    return 0;
}

学长代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#include <queue>
#include <stack>

using namespace std;
int n,m;
struct edge
{
    int x,y,cost;
};
typedef struct edge edge;
edge a[3005];
int cmp(edge aa,edge bb)
{
    return aa.cost<bb.cost;
}
int fa[1005];
int Find(int x)
{
    if(fa[x]==x) return x;
    else return fa[x]=Find(fa[x]);
}

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].cost);
    }
    sort(a,a+m,cmp);
    for(int i=0;i<=n;i++)
    {
        fa[i]=i;
    }
    int ans=0;
    int cnt=0;
    for(int i=0;i<m;i++)
    {
        int x=a[i].x;
        int y=a[i].y;
        int cost=a[i].cost;
        int aa=Find(x);
        int bb=Find(y);
        if(aa!=bb)
        {
            fa[aa]=bb;
            ans+=cost;
            cnt++;
            if(cnt==n-1)
            {
                break;
            }
        }
    }
    if(cnt<n-1)
    {
        printf("-1\n");
    }
    else
    {
        printf("%d\n",ans);
    }


    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容

  • 生活大爆炸版石头剪刀布 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,...
    bbqub阅读 451评论 0 0
  • 数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory Limit: 655...
    Otis4631阅读 695评论 0 0
  • 明天的你,在为你等待。 明天会发生什么都是未知数,发生的事情,或许一步步按照自己规划的走,也或许逐渐变的连自己变得...
    王德彪阅读 135评论 0 0
  • 夜晚终将要降临 如果不能怀着一颗从容的心 也不要惊慌失措 静静的做你该做的事 一如平常 吃饭 睡觉 上班 积极的...
    洛可可哥特阅读 242评论 0 2
  • 曾经对学开车有很强的排斥的我,今天突然主动要提出要去学驾照了,家里人的反应不一,妹妹很惊讶的说,“怎么可能,你要去...
    息县心协沐风f阅读 257评论 0 1