zoukankan      html  css  js  c++  java
  • 试题 历届试题 国王的烦恼(思维,并查集)

    问题描述
      C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多座桥连接。然而,由于海水冲刷,有一些大桥面临着不能使用的危险。

      如果两个小岛间的所有大桥都不能使用,则这两座小岛就不能直接到达了。然而,只要这两座小岛的居民能通过其他的桥或者其他的小岛互相到达,他们就会安然无事。但是,如果前一天两个小岛之间还有方法可以到达,后一天却不能到达了,居民们就会一起抗议。

      现在C国的国王已经知道了每座桥能使用的天数,超过这个天数就不能使用了。现在他想知道居民们会有多少天进行抗议。
    输入格式
      输入的第一行包含两个整数n, m,分别表示小岛的个数和桥的数量。
      接下来m行,每行三个整数a, b, t,分别表示该座桥连接a号和b号两个小岛,能使用t天。小岛的编号从1开始递增。
    输出格式
      输出一个整数,表示居民们会抗议的天数。
    样例输入
    4 4
    1 2 2
    1 3 2
    2 3 1
    3 4 3
    样例输出
    2
    样例说明
      第一天后2和3之间的桥不能使用,不影响。
      第二天后1和2之间,以及1和3之间的桥不能使用,居民们会抗议。
      第三天后3和4之间的桥不能使用,居民们会抗议。
    数据规模和约定
      对于30%的数据,1<=n<=20,1<=m<=100;
      对于50%的数据,1<=n<=500,1<=m<=10000;
      对于100%的数据,1<=n<=10000,1<=m<=100000,1<=a, b<=n, 1<=t<=100000。
    思路
    考察并查集,初始化时各个点都是不连通的,按桥的使用时间从大到小排序,如果桥的两端不连通,进行合并,为抗议的一天,因为即使在天数小的某一天是连通的,在这一天仍然是不连通的。
    需要注意统计时要相同的抗议的一天不能重复累加。
    #include<bits/stdc++.h>
    using namespace std;
    struct node{
        int a,b,t;
    }s[100005];
    int n,m,c=0,maxx=0;
    int f[10005];
    int get(int a){
        if(f[a]==a)return a;
        else return f[a]=get(f[a]);
    }
    void init(){
         for(int j=1;j<=10000;j++)f[j]=j;
    }
    int cmp(node a,node b){
        return a.t>b.t;
    }
    int merge_(int a,int b){
        int t1=get(a);
        int t2=get(b);
        if(t1!=t2){///不连通
            f[t1]=t2;
            return 1;
        }
        return 0;
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=0;i<m;i++){
            scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].t);
        }
        init();
        sort(s,s+m,cmp);///desc
        int pre=-1;
        for(int i=0;i<m;i++){
            if(merge_(s[i].a,s[i].b)&&s[i].t!=pre){
                c++;
                pre=s[i].t;
            }
        }
        cout<<c<<endl;
        return 0;
    }

     

  • 相关阅读:
    matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
    Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
    机器学习基石笔记1——在何时可以使用机器学习(1)
    Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
    matlab安装过程的被要求的配置程序
    jdk环境变量配置
    Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记
    Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记
    Coursera 机器学习 第7章 Support Vector Machines 学习笔记
    linux服务器---squid限制
  • 原文地址:https://www.cnblogs.com/mohari/p/13411331.html
Copyright © 2011-2022 走看看