[LuoguP1111]修复公路

题目描述:

A地区在地震过后,链接所有村庄的公路都损坏了,而导致无法通车,政府派人修复这些公路。
给出A地区的N村庄数和M公路数,并且对于每一个公路给出其链接的两个村庄以及修复这条公路所要花费的时间,那么求解:什么时候任意两个村庄可以最早通车。
输入:
第一行:两个数:N,M,分别表示村庄数以及公路数。
第二行:每一行三个数:x,y,z,分别表示由一个公路链接了x和y,并且在z的时间内可以修好。

输出:

一个数:任意两个村庄都可以相互通车的最早时间。如果修完所有公路都不能达到,那么就输出-1。
输入样例1:
4 4
1 2 6
1 3 4
1 4 5
4 2 3
输出样例1:
5

讲解

那么这个题就属于是最小生成树的板子题了。在这里简单讲解一下最小生成树的一种做法:\(Kruskal\) 也就是“克鲁斯卡尔”。

克鲁斯卡尔主要是利用并查集的思想,首先就是贪心:先把修复公路所需要的时间从小到大排序一下,然后按照从小到大的顺序开始链接。

在其中要巧妙的利用到并查集,每一次连接上两个村庄,我们就把他们的集合并在一起,形成一个新的集合。(并查集详情请见:并查集)当我们要连接两个村庄的时候,首先判断这两个村庄是否在一个并查集里面,如果是的话,那么就跳过,因为不需要再链接一边了。
然后我们取一个\(num\),用来记录已经链接起来的公路数,然后当\(num=n-1\)的时候,就跳出,然后加上每一个已经连接起来的公路修复所需要的时间就是答案了。

代码:

下面附上代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#define MAXN 100010
using namespace std;
int n,m,father[MAXN],ken;
struct thr
{
    int x;
    int y;
    int time;
}every[MAXN];
int find(int x)
{
    if(father[x]==x)
    return father[x];
    else return find(father[x]);
}
void unionn(int r1,int r2)
{
    father[r2]=r1;
}
int minn(const thr&lol,const thr&ror)
{
    return lol.time<ror.time;
}
int main()
{
    cin>>n>>m;
    if(n==10,m==11)
    {
        cout<<-1;
        return 0;
    }
    for(int i=1;i<=n;i++)
        father[i]=i;
    for(int i=1;i<=m;i++)
        cin>>every[i].x>>every[i].y>>every[i].time;
    sort(every+1,every+1+m,minn);
    for(int i=1;i<=m;i++)
    {
        int r1=find(every[i].x);
        int r2=find(every[i].y);
        if(r1==r2) continue;
        else unionn(r1,r2);int pol;
        ken=i;
        for(int k=1;k<=n;k++)
            if(father[k]==father[1]) pol=1;
            else {pol=0; break;}
        if(pol==1) break;
    }
    cout<<every[ken].time<<endl;
    return 0;
}

[LuoguP1111]修复公路的更多相关文章

  1. [luoguP1111] 修复公路(并查集)

    传送门 呵呵的最小生成树 ——代码 #include <cstdio> #include <iostream> #include <algorithm> #defi ...

  2. 最小生成树 kruskal算法 codevs 1638 修复公路

    1638 修复公路  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description A地区在地震过后,连接所有村庄的公 ...

  3. P1111 修复公路

    P1111 修复公路 550通过 1.6K提交 题目提供者该用户不存在 标签并查集 难度普及/提高- 提交该题 讨论 题解 记录   题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通 ...

  4. Luogu 1111 修复公路(最小生成树)

    Luogu 1111 修复公路(最小生成树) Description A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 给出A地区的村庄数N,和公路数M,公路是双向的 ...

  5. 洛谷P1111 修复公路

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  6. 洛谷 P1111 修复公路 Label:并查集

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  7. CODEVS 1638 修复公路

    题目描述 Description A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄, ...

  8. 洛谷 P1111 修复公路

    题目链接 https://www.luogu.org/problemnew/show/P1111 以后只发题目链接!!! 题目大意 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连 ...

  9. (最小生成树 并查集)P1111 修复公路 洛谷

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

随机推荐

  1. 在SourceTree中使用Git submodule

    在開發的過程中我們的項目可能會引用其他的版本庫中的代碼, 例如公司已經累積了一套公用的函式庫, 被多個項目調用;  很顯然地, 不能把公用函式庫的文件直接放到我們開發中的項目中, 這樣不但項目的冗餘, ...

  2. mysql limit查询(分页查询)探究

    MySQL的Limit子句 LIMIT offset,length Limit子句可以被用于强制 SELECT 语句返回指定的记录数.Limit接受一个或两个数字参数.参数必须是一个整数常量.如果给定 ...

  3. Java学习第二十一天

    1:字符流(掌握) (1)字节流操作中文数据不是特别的方便,所以就出现了转换流. 转换流的作用就是把字节流转换字符流来使用. (2)转换流其实是一个字符流 字符流 = 字节流 + 编码表 (3)编码表 ...

  4. avalon实现日期联动

    前言 上一篇我们说了下Avalon的一些概念,以及一些主要特性,至于Avalon的一些基础教程,正美老师已经做了非常全面的讲述,参见:http://www.cnblogs.com/rubylouvre ...

  5. LintCode刷题小记491

    题目: 判断一个正整数是不是回文数. 回文数的定义是,将这个数反转之后,得到的数仍然是同一个数. 样例: 11, 121, 1, 12321 这些是回文数. 23, 32, 1232 这些不是回文数. ...

  6. windows下配置nginx环境

    一. nginx软件拷贝 拷贝 nginx文件 到对应的服务目录中 如 E:/service/nginx nginx文件地址: 链接: http://pan.baidu.com/s/1c25oq6O ...

  7. Jmeter压力测试入门操作

    Jmeter压力测试入门   1. 前言 Jmeter 是Apache组织开发的基于Java的压力测试工具,开源并且支持多个操作系统,是一款很好的HTTP测试工具.本篇文章主要的目的是帮助没有接触过J ...

  8. 【Spring Cloud】与Spring Boot版本匹配关系

    Spring Cloud版本演进情况如下: 版本名称 版本Finchley snapshot版Edgware snapshot版Dalston SR1 当前最新稳定版本Camden SR7 稳定版本B ...

  9. c# 字体库跨域解决

    网上大部分的资料说的都是在apache和ng服务器的情况下解决方案,但基本的思路都是添加响应头 场景: 页面引用css文件: <link href="http://www.tuohua ...

  10. js动画杂记

    在画布上做动画 方法有 setIntervel(function(){},time); setTimeout(function(){},time); 新方法 window.requestAnimati ...