修复公路

修复公路题目链接 https www luogu org problemnew show P1111 显而易见 这道题目使用的是并查集与生成树 查询 x 村庄和 y 村庄时候相连 1 的情况也很好判断 我用了一种很自己认为弱智的算法进行判断 还有一个问题 怎样求出最小的各点全连通的时间 可以考虑以下思路 将各个道路按照建造的时间排序 每次 combine 两个村庄的时候就可以更新当前的时间

题目链接:https://www.luogu.org/problemnew/show/P1111

显而易见,这道题目使用的是并查集与生成树,查询x村庄和y村庄时候相连

-1的情况也很好判断(我用了一种很自己认为弱智的算法进行判断)

还有一个问题,怎样求出最小的各点全连通的时间

可以考虑以下思路:将各个道路按照建造的时间排序,每次combine两个村庄的时候就可以更新当前的时间,当前时间即为“最早各点连通时间”【因为两点连通过后下次的判断可以直接跳过,不考虑建造这条道路,由此可知此算法正确】

以下是代码:

 1 #include 
    
     2 #include 
     
      3 #include 
      
       4 #include 
       
        5 #include 
        
         6 
        using 
        namespace 
         std;  
         7 
        const 
        int N= 
        1005 
        ;  
         8 
        int 
         t[N][N],father[N];  
         9 
        int find( 
        int 
         x)  
        10 
        {  
        11 
        if(father[x]!= 
        x)  
        12 father[x]= 
        find(father[x]);  
        13 
        return 
         father[x];  
        14 
        }  
        15 
        void combine( 
        int x, 
        int 
         y)  
        16 
        {  
        17 
        int 
         t1,t2;  
        18 t1= 
        find(x);  
        19 t2= 
        find(y);  
        20 
        if(t1!= 
        t2)  
        21 father[t1]= 
        t2;  
        22 
        }  
        23 
        struct 
         build  
        24 
        {  
        25 
        int 
         tm,x,y;  
        26 }a[ 
         
        ];  
        27 
        bool 
         cmp(build p,build q)  
        28 
        {  
        29 
        return p.tm< 
        q.tm;  
        30 
        }  
        31 
        int 
         n,m;  
        32 
        int 
         main()  
        33 
        {  
        34 
        int 
         x,y,tm,minn;  
        35 cin>>n>> 
        m;  
        36 
        for( 
        int i= 
        1;i<=n;++ 
        i)  
        37 father[i]= 
        i;  
        38 
        for( 
        int i= 
        1;i<=m;++ 
        i)  
        39 cin>>a[i].x>>a[i].y>> 
        a[i].tm;  
        40 sort(a+ 
        1,a+m+ 
        1 
        ,cmp);  
        41 
        for( 
        int i= 
        1;i<=m;++ 
        i)  
        42 
         {  
        43 
        if(find(a[i].x)!= 
        find(a[i].y))  
        44 
         {  
        45 minn= 
        a[i].tm;  
        46 
         combine(a[i].x,a[i].y);  
        47 
         }  
        48 
         }  
        49 
        for( 
        int i= 
        2;i<=n;++ 
        i)  
        50 
         {  
        51 
        if(find( 
        1)!= 
        find(i))  
        52 
         {  
        53 cout<< 
        " 
        -1 
        "<< 
        endl;  
        54 
        return 
        0 
        ;  
        55 
         }  
        56 
         }  
        57 cout< 
        
          endl; 
         58 
         return 
         0 
         ;  
         59 } 
         
        
       
      
     
   

 

总结:遇到此类(如同连通块、并查集等)求各点全连通的题目,可以考虑对时间(价值)进行排序以求出最小时间。

转载于:https://www.cnblogs.com/cptbtptpbcptbtptp/p/11140547.html

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

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

(0)
上一篇 2026年3月19日 上午11:57
下一篇 2026年3月19日 上午11:57


相关推荐

  • 【SQL Server】网上购物商城数据库设计报告(专业课设作品附上sql文件文档)

    【SQL Server】网上购物商城数据库设计报告(专业课设作品附上sql文件文档)目录一 需求分析 1 1 背景 1 2 数据需求 1 3 事物需求 1 4 数据流程图二 概念结构设计 2 1E R 图三 关系模式 3 2 数据逻辑结构四 物理结构设计 4 1 建立一个数据库 4 2 建立八张表 4 3 建立表的连接五 系统功能的实现 5 1 数据库建立 5 2 创建立数据表 5 3 建立表连接 5 4 数据初始 5 4 1 管理員初姶化 5 4 2 添加商品組信息 5 4 3 在各商品組加入商品 5 4 4 添加注册会員信息 5 4 6 添加枚限信息 5 4 7 添加管理员权限信息 5 5 查询 5 5 1 查询本站有哪些种类的商

    2025年10月25日
    6
  • python 函数def

    python 函数def一、不同层级的调用importcountcount.add(2,3)print(count.add(2,3))在不同层级引用函数,不能直接引用,否则会报错:importcountModul

    2022年7月5日
    29
  • linux抓包命令tcpdump保存到wireshark_tcpdump抓包命令举例

    linux抓包命令tcpdump保存到wireshark_tcpdump抓包命令举例一,tcpdump-ilo-s0-n-nn-w/tmp/12345.pcaptcpandport12345注:tcpdump:抓包命令-ilo:抓取lo网卡的数据包(回环网口的包)-s0:从每个分组中读取最开始的snaplen个字节,后面可以跟数字指定截取多少个字节,0是指截取所有。(防止包截断)-nnn:以数字显示主机及端口,不解析主机名…

    2022年8月22日
    10
  • 微信小程序 40029错误

    微信小程序 40029错误{“errmsg”:“invalidcode,hints:[req_id:xxxxxxx],“errcode”:40029”}查看project.config.json中的appid是否与自己申请的appid一致。不一致就会出现这种问题。解决方法就是改成自己申请的appid…

    2022年4月28日
    47
  • Excel设置(单行或多行)固定表头的方法

    Excel设置(单行或多行)固定表头的方法本文介绍 Excel 设置固定表头的两种方法 一种是设置首行为固定表头 另一种是设置多行为固定表头 一 设置首行固定表头 1 1 选择并打开一个有数据的 Excel 表格 1 2 点击 Excel 菜单栏的 视图 冻结窗格 冻结首行 设置首行为固定表头 1 3 完成首行表头固定二 设置多行固定表头 2 1 选择要固定行数的下一行 比如要固定前两行 则选择

    2026年3月17日
    2
  • 3分钟教你用DeepSeek+即梦做出AI跨时空对话,太火爆了!

    3分钟教你用DeepSeek+即梦做出AI跨时空对话,太火爆了!

    2026年3月12日
    11

发表回复

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

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