• P1111 修复公路 (prim)


    题目背景

    A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。

    题目描述

    给出A地区的村庄数N,和公路数M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)

    输入输出格式

    输入格式:
    第1行两个正整数N,M

    下面M行,每行3个正整数x, y, t,告诉你这条公路连着x,y两个村庄,在时间t时能修复完成这条公路。

    输出格式:
    如果全部公路修复完毕仍然存在两个村庄无法通车,则输出-1,否则输出最早什么时候任意两个村庄能够通车。

    输入输出样例

    输入样例#1: 复制
    4 4
    1 2 6
    1 3 4
    1 4 5
    4 2 3
    输出样例#1: 复制
    5
    说明

    N<=1000,M<=100000

    x<=N,y<=N,t<=100000

    code:

    #include<cstdio>
    const int inf=0x3f3f3f3f;
    int n,m,cnt,sum;
    int vis[1005],head[1005],mincost[1005],mst[1005];
    
    struct edg{
        int to,next,time;
    }edge[200010];
    
    void add(int x,int y,int t){
        edge[++cnt].next=head[x];
        edge[cnt].to=y;
        edge[cnt].time=t;
        head[x]=cnt;
    }
    
    void prim(int x){
        if(cnt==n-1) return ;
        cnt++;
        for(int i=head[x];i;i=edge[i].next)
            if(!vis[edge[i].to]&&edge[i].time<mincost[edge[i].to])
                mst[edge[i].to]=x,mincost[edge[i].to]=edge[i].time;
        int minn=inf,minst;
        for(int i=1;i<=n;i++)
            if(mst[i]&&minn>mincost[i])
                minn=mincost[i],minst=i;
        if(sum<minn) sum=minn;
        vis[minst]=1,mst[minst]=0;
        prim(minst);
    }
    
    int main(){
        scanf("%d %d",&n,&m);
        for(int i=1;i<=m;i++){
            int a,b,c;
            scanf("%d %d %d",&a,&b,&c);
            add(a,b,c);
            add(b,a,c);
        }
        for(int i=1;i<=n;i++) mst[i]=inf;
        for(int i=1;i<=n;i++) mincost[i]=inf;
        cnt=0,vis[1]=1;
        prim(1);
        for(int i=1;i<=n;i++) 
            if(!vis[i]){
                printf("-1");
                return 0;
            }
        printf("%d",sum);
        return 0;
    }
    版权声明:本文为博主原创文章,未经博主允许不得转载。 博主:https://www.cnblogs.com/Menteur-Hxy/
  • 相关阅读:
    浏览器嗅探
    (转)javascript中为何在匿名function函数后面还外加一个括号
    js十进制转换二进制
    css_毛玻璃
    css桌布样式
    ocr api 识别表格 图片
    Linux查看日志常用命令
    linux find 命令查找文件和文件夹
    docker上安装airflow
    文件权限中 chmod、u+x、u、r、w、x分别代表什么
  • 原文地址:https://www.cnblogs.com/Menteur-Hxy/p/9248029.html
Copyright © 2020-2023  润新知