zoukankan      html  css  js  c++  java
  • 洛谷 P1547 Out of Hay (最小生成树)

    嗯...

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

    思路:

    嗯...既然题中已经说了是最小生成树,那么是需要在最小生成树的模板上稍作修改即可。要求的是最小生成树中的最长边,注意:

    一. 不是每一条边都可以做为最小生成树中的边。

    二. 所要求的这条边是连接两个点的边的最大权值。

    所以,我们就在“并”操作的时候稍作修改,用ans记录下它的最大权值即可。

    AC代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 
     7 int f[100005];
     8 int ans;
     9 
    10 struct node{
    11     int x, y, l;
    12 } a[1000005];
    13 
    14 inline int cmp(node i, node j){
    15     return i.l < j.l;
    16 }
    17 
    18 inline int find(int x){
    19     if(f[x] != x)
    20         f[x] = find(f[x]);
    21     return f[x];
    22 }//"查" 
    23 
    24 int main(){
    25     int n, m;
    26     scanf("%d%d", &n, &m);
    27     for(int i = 1; i <= m; i++){
    28         scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].l);
    29     }
    30     for(int i = 1; i <= n; i++)
    31         f[i] = i;
    32     sort(a+1, a+1+m, cmp);//按边权排序,"最小" 
    33     for(int i = 1; i <= m; i++){
    34         int r1 = find(a[i].x);
    35         int r2 = find(a[i].y);
    36         if(r1 != r2){
    37             f[r1] = r2;
    38             ans = max(ans, a[i].l);//维护最大边权 
    39         }//"并" 
    40     }
    41     printf("%d", ans);
    42     return 0;
    43 }
    AC代码
  • 相关阅读:
    简单的自我介绍
    学习总结(北航助教陈彦吉)
    2019春季第十二周助教总结
    2019春季第十一周助教总结
    第十一周作业
    2019春季第十周助教总结
    2019春季第九周助教总结
    第九周作业
    2019春季第八周助教总结
    第八周作业
  • 原文地址:https://www.cnblogs.com/New-ljx/p/10846708.html
Copyright © 2011-2022 走看看