zoukankan      html  css  js  c++  java
  • 洛谷 P2330 [SCOI2005]繁忙的都市(最小生成树)

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

    这道题的问法也实在是太模板了吧:

    1.改造的道路越少越好

    2.能够把所有的交叉路口直接或间接的连通起来

    3.改造的那些道路中分值最大的道路分值尽量小

     

    通过这些就可以判断出这是一道最小生成树的题(如果你还不了解最小生成树,请点击此网址查看:https://www.cnblogs.com/New-ljx/p/10779353.html

    思路:

    就是一个最小生成树的模板,在最后将x点和y点合并的时候加上一个计数器cnt和一个maxn来保留最大值即可。

    AC代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 
     7 int cnt, maxn;
     8 int f[1005];
     9 
    10 struct node{
    11     int x, y, l;
    12 } a[100005];
    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(x != f[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     }
    33     sort(a+1, a+1+m, cmp);
    34     for(int i = 1; i <= m; i++){
    35         int r1 = find(a[i].x);
    36         int r2 = find(a[i].y);
    37         if(r1 != r2){
    38             f[r1] = r2;
    39             cnt++;//计数器 
    40             maxn = max(maxn, a[i].l);//保存最大值 
    41         }
    42     }
    43     printf("%d %d", cnt, maxn);
    44     return 0;
    45 }
    AC代码
  • 相关阅读:
    [转]C++ Operator Overloading Guidelines
    SICP学习笔记(2.2.1)
    .net中模拟键盘和鼠标操作
    javaScript系列 [17]运算符
    javaScript系列 [24]Math
    javaScript系列 [19]string
    javaScript系列 [22]引用类型
    javaScript系列 [12]Canvas绘图(曲线)
    javaScript系列 [15]Canvas绘图(压缩)
    javaScript系列 [21]Array
  • 原文地址:https://www.cnblogs.com/New-ljx/p/10779439.html
Copyright © 2011-2022 走看看