[NOIP模拟] 修复公路

[NOIP模拟] 修复公路题 2 修复公路 road 问题描述 A 地区在地震过后 连接所有村庄的公路都造成了损坏而无法通车 政府派人修复这些公路 给出 A 地区的村庄数 N 和公路数 M 公路是双向的 并告诉你每条公路连着哪两个村庄 并告诉你什么时候能修完这条公路 问最早什么时候任意两个村庄能够通车 即最早什么时候任意两条村庄都存在至少一条修复完成的道路 可以由多条公路连成一条道路 数据输入 第 1 行两个正整数 N M N lt 1000 M lt 下面 M 行 每行 3 个正整数 x y t 告诉你这条公

题2 修复公路(road)

【问题描述】

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

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

【数据输入】

第1行两个正整数N,M(N<=1000,M<=)

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

【数据输出】

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

【样例输入】

4 4

1 2 6

1 3 4

1 4 5

4 2 3

【样例输出】

5

一、使用堆对边排序

#include 
  
    #include 
   
     using namespace std; const int N = 1010,M = ; typedef pair 
    
      > PIP; priority_queue 
     
       ,greater 
      
        > que; int f[N],count,sum = -1; //获得v的祖宗 int get_f(int v){ if(f[v] == v){ return v; }else{ f[v] = get_f(f[v]); return f[v]; } } //两个点合成同个集合 bool merge(int v,int u){ int t1 = get_f(v); int t2 = get_f(u); //若祖宗不同,即不是同个集合,就进行合并 if(t1 != t2){ f[t2] = t1;//靠左原则:t1为祖宗 return true; } return false; } int main(){ // freopen("road.in","r",stdin); // freopen("road.out","w",stdout); int n,m; cin>>n>>m; for(int i = 1; i <= n; i++) f[i] = i; for(int i = 1; i <= m; i++){ int x,y,t; cin>>x>>y>>t; que.push(make_pair(t,make_pair(x,y))); } //Kruskal生成树 for(int i = 1; i <= m; i++){ pair 
       
         top = que.top().second; int t = que.top().first; que.pop(); if(merge(top.first,top.second)){ count++; sum = max(sum,t); } if(count == n-1) break; } //若生成的边数小于n-1说明有孤立的村庄 if(count < n-1){ cout<<-1; return 0; } cout< 
         
        
       
      
     
    
  

二、使用内置排序函数sort

#include 
  
    #include 
   
     #include 
    
      using namespace std; const int N = 1010,M = ; typedef pair 
     
       > PIP; PIP k[M]; //priority_queue 
      
        ,greater 
       
         > que; int f[N],ct,sum = -1; //获得v的祖宗 int get_f(int v){ if(f[v] == v){ return v; }else{ f[v] = get_f(f[v]); return f[v]; } } //两个点合成同个集合 bool merge(int v,int u){ int t1 = get_f(v); int t2 = get_f(u); //若祖宗不同,即不是同个集合,就进行合并 if(t1 != t2){ f[t2] = t1;//靠左原则:t1为祖宗 return true; } return false; } int main(){ // freopen("road.in","r",stdin); // freopen("road.out","w",stdout); int n,m; cin>>n>>m; for(int i = 1; i <= n; i++) f[i] = i; for(int i = 1; i <= m; i++){ cin>>k[i].second.first>>k[i].second.second>>k[i].first; } sort(k+1,k+m+1); for(int i = 1; i <= m; i++){ int u = k[i].second.first; int v = k[i].second.second; int t = k[i].first; if(merge(u,v)){ ct++; sum = max(sum,t); } if(ct == n-1) break; } if(ct != n-1){ cout<<-1; return 0; } cout< 
         
        
       
      
     
    
  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216374.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午12:00
下一篇 2026年3月18日 下午12:00


相关推荐

  • 零基础保姆级本地化部署文心大模型4.5开源系列

    零基础保姆级本地化部署文心大模型4.5开源系列

    2026年3月12日
    2
  • 绕过校园网认证实现免费上网【三端】

    绕过校园网认证实现免费上网【三端】前言很多时候 当流量不够用时 看着周围那么多热点又连不上 是不是有点心痒痒呢 那么有没有办法不需要要通过这些热点的认证即可上网呢 当然是有的 另外在此强调一点 本教程仅用于学习测试用途 请勿用于不正当的途径 大体思路连上那些公共热点 往往都能成功 但是也往往还需要进一步的认证才能够上网 没有认证的时 当我们访问 http 的网站时 我们的请求会被拦截并跳转至热点 下文就以校园网代表热点了 的登

    2026年3月16日
    2
  • 图解圆周卷积

    图解圆周卷积1 圆周卷积 circularconv 圆周卷积 也叫循环卷积 两个长度为 N 的有限场序列 x n x left n right 和 h n h left n right 的循环卷积定义为 y n N 1m 0x m h n m N RN n xn yny left n right sum m 0 N 1 x left

    2026年3月17日
    2
  • django验证码登录_双重认证怎么关闭

    django验证码登录_双重认证怎么关闭djoser是什么?作用:Django认证系统的REST实现。djoser库提供了一组DjangoRestFramework视图,用于处理注册、登录、注销、密码重置和帐户激活等基本操作。它适用于

    2022年7月30日
    10
  • C语言排序(冒泡排序、选择排序、插入排序和快速排序)

    C语言排序(冒泡排序、选择排序、插入排序和快速排序)C语言排序(冒泡排序、选择排序、插入排序和快速排序)C语言排序什么是排序?1.冒泡排序基本思想主要思路:动态示例demo2.选择排序基本思想主要思路动态示例demo3.插入排序基本思想主要思路动态示例demo4.快速排序基本思想主要思路动态示例demoC语言排序什么是排序?就是将无序的变成有序的1.冒泡排序基本思想在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,

    2022年6月25日
    21
  • pytest fixtures_pytest allure

    pytest fixtures_pytest allurefixture的优势Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进:命名方式灵活,不局限于setup和teardown这几个命名conf

    2022年7月29日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号