题解 P1111 【修复公路】

news/2024/7/2 19:54:09

题意翻译:

求该图已联通时所用最小时间。

做法:

最小生成树
Krusal算法

  1. 先把所有边按修复时间从大到小排序,

  2. 再每次取出权值最小的边,如果它的两个端点$u,v$已经联通了就跳过,

  3. 否则就把这条边加入图中,并且把$u,v$加入到同一个集合中。

#### 最后,如果取了n-1条边,则说明该图已联通,否则该图不能联通。

注意:

所有的路,它们是,同时修的,(第一次做的时候以为一次只能修一条)

所以我们只需要求最后加入的边用时多少就好了

完整代码如下

#include<iostream>
#include<algorithm>
using namespace std;
int n,prt[1005],m;
struct road
{
    int x,y,time;
    bool operator < (const road&fuze) const//重载运算符
    {
        return time<fuze.time;
        }
}a[100005];
int find(int x)//并查集,查找父节点
{
    return x==prt[x]?x:prt[x]=find(prt[x]);
}
int main()
{
    int cnt=0;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
        cin>>a[i].x >>a[i].y >>a[i].time ; 
    sort(a+1,a+1+m);//按边权排序
    for(int i=1;i<=n;i++)
        prt[i]=i;
    int ans=-1;
    for(int i=1;i<=m;i++)
    {
        if(find(a[i].x )==find(a[i].y )) continue;
        cnt++;
        prt[find(a[i].x ) ]=find(a[i].y ) ;
        ans=max(ans,a[i].time ); //更新答案
            
    }
    if(cnt==n-1)//如果没有取出足够形成树的边
        cout<<ans<<endl;
    else 
        cout<<"-1"<<endl;
    return 0; 
}

转载于:https://www.cnblogs.com/lizinuo/p/10543873.html


http://www.niftyadmin.cn/n/3297892.html

相关文章

linux下的压缩解压缩

Linux下最常用的打包程序就是tar了&#xff0c;使用tar程序打出来的包我们常称为tar包&#xff0c;tar包文件的命令通常都是以.tar结尾的。生成tar包后&#xff0c;就可以用其它的程序来进行压缩了&#xff0c;所以首先就来讲讲tar命令的基本用法&#xff1a; tar命令的选项有很…

Elasticsearch 并发修改乐观锁

来自&#xff1a; http://blog.csdn.net//jiao_fuyou/article/details/50482117 版本控制的一个例子 ?123456789101112131415161718192021curl -XPOST http://localhost:9200/test/test/1 -d {"msg": "test"} {"_index": "test", &qu…

题解 P1886 【滑动窗口】

我用的双端队列来做的 题意就不讲了吧。可以看出来最大值和最小值是同一个问题&#xff0c;改一下大于号和小于号就行了。所以我只讲怎么求最大值吧。 定义一个双端队列&#xff08;相当于queue两端都可以插入或弹出&#xff0c;可以自行百度&#xff09; deque<pair> a,…

题解 CF1060B 【Maximum Sum of Digits】

先讲一下思路 首先输入一个数s; 然后要把S拆为AB&#xff1b; 那么&#xff0c;A的各个数位要尽可能大&#xff1b; 一&#xff1a;找出S的位数CNT,A加上CNT-1位9&#xff1b; 比如S2233213123的话&#xff0c;A一开始就等于 999999999 二&#xff1a;A的第一位为S第一位数字-1…

Jedis使用总结【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】 ...

http://www.blogjava.net/masfay/archive/2012/07/03/382080.html 前段时间细节的了解了Jedis的使用&#xff0c;Jedis是redis的java版本的客户端实现。本文做个总结&#xff0c;主要分享如下内容&#xff1a;【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【…

使用C++随机生成数据实战

题目地址 今天尝试了一下用C生成数据&#xff0c;参考了这篇文章。 主要过程是你需要先写一个标算 #include<bits/stdc.h> using namespace std; int ans; int main() {cout<<ans<<endl&#xff1b;return 0; } 接着使用这个程序 #include<iostream> #…

【缅怀妈妈系列诗歌】之十五:妈妈,请恕孩儿不孝

【缅怀妈妈系列诗歌】之十五&#xff1a;妈妈&#xff0c;请恕孩儿不孝题记&#xff1a;由于本想给妈妈的坟墓堆砌高一点、大一点、雄伟一点&#xff0c;因封建礼仪约束未能实现而感怀。谨以这一系列文章和诗歌缅怀我病逝的妈妈&#xff0c;祈祷她老人家在天能得以安息&#xf…

[Elasticsearch] 锁

字段折叠(Field Collapsing) 一个常见的需求是通过对某个特定的字段分组来展现搜索结果。我们或许希望通过对用户名分组来返回最相关的博文。对用户名分组意味着我们需要使用到terms聚合。为了对用户的全名进行分组&#xff0c;name字段需要有not_analyzed的原始值&#xff0c;…