• 【题解】P1396 营救-C++


    原题传送门

    这道题目基本就是一个克鲁斯卡尔最小生成树的模板题,唯一不同的是,这道题目的最终目标不是所有点相连,而是只要s和t相连就可以了。还有就是这道题目求的是最小生成树中的最大边权值。
    但是,克鲁斯卡尔是从最小的边权值开始考虑的,当s和t第一次连通时考虑的那条边,就是当前考虑的最大的权值的边,直接输出就可以了啊。
    代码也很简单,贴一下:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 struct noded
     4 {
     5     int u,v;
     6     int w;
     7     noded(){}
     8     noded(int uu,int vv,int ww)
     9     {
    10         u=uu,v=vv,w=ww;
    11     }
    12 }mp[200010];
    13 bool cmp(noded x,noded y)
    14 {
    15     return x.w<y.w;
    16 }
    17 int fa[5010];
    18 int get(int x)
    19 {
    20     if(fa[x]==x)return x;
    21     else 
    22     {
    23         fa[x]=get(fa[x]);
    24         return fa[x];
    25     }
    26 }
    27 bool merge(int x,int y)
    28 {
    29     int r1=get(x),r2=get(y);
    30     if(r1!=r2)
    31     {
    32         fa[r1]=r2;
    33         return true;
    34     }
    35     else return false;
    36 }
    37 int ans[250010];
    38 void init()
    39 {
    40     for(int i=1;i<=5000;i++)
    41     {
    42         fa[i]=i;
    43     }
    44 }
    45 int main()
    46 {
    47     //sqrt(pow((x1-x2),2)+pow((y1-y2),2));
    48     int n,p,s,t;
    49     cin>>n>>p>>s>>t;
    50     for(int i=1;i<=p;i++)
    51     {
    52         cin>>mp[i].u>>mp[i].v>>mp[i].w;
    53     }
    54     sort(mp+1,mp+1+p,cmp);
    55     //for(int i=1;i<=k;i++)
    56     //{
    57     //    cout<<endl<<mp[i].w;
    58     //}
    59     init();
    60     int cnt=0;
    61     int ans=0;
    62     for(int i=1;i<=p;i++)
    63     {
    64         if(merge(mp[i].u,mp[i].v))
    65         {
    66             if(get(s)==get(t))
    67             {
    68                 cout<<mp[i].w<<endl;
    69                 return 0;
    70             }
    71             if(cnt==p-1) break;
    72         }
    73     }
    74     return 0;
    75 }
    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    ftp 传文件完整代码(二)
    生成文件 权限 以及ftp 传数据(一)
    定时任务配置
    发送电子邮件遇到问题
    mysql 主从分离配置
    知道开始时间结束时间 计算这之间一共多少天
    mysql 语句集(二)
    mysql 的sql文件导出导入
    mysql 批量添加 更新
    Spring Boot中如何干掉if else
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11213331.html
Copyright © 2020-2023  润新知