zoukankan      html  css  js  c++  java
  • 国王的烦恼---nyoj

    国王的烦恼

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:2
    描述

        C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多座桥连接。然而,由于海水冲刷,有一些大桥面临着不能使用的危险。如果两个小岛间的所有大桥都不能使用,则这两座小岛就不能直接到达了。然而,只要这两座小岛的居民能通过其他的桥或者其他小岛互相到达,他们就会安然无事。但是,如果前一天两个小岛之间还有方法可以到达,后一天却不能到达了,居民们就会一起发起抗议。

        现在C国的国王已经知道了每座桥能使用的天数,超过这个天数就不能使用了。现在他想知道居民们一共会发起多少次抗议。

    输入
      多组测试数据。
      每组数据先输入两个正整数n和m。
      接下来m行,每行三个整数a, b, t,分别表示该座桥连接a号和b号两个小岛,能使用t天。小岛的编号从1开始递增。(1≤n≤10000,1≤m≤100000,1<=a,b<=n,1≤t≤100000)
    输出
      输出一个整数,表示居民们发起抗议的次数。
    样例输入
    4 4
    1 2 2
    1 3 2
    2 3 1
    3 4 3
    样例输出
    2
    提示
    对于样例:
    第一天后2和3之间的桥不能使用,不影响。
    第二天后1和2之间,以及1和3之间的桥不能使用,居民们会抗议。
    第三天后3和4之间的桥不能使用,居民们会抗议。
    来源
    蓝桥杯
    上传者

    TC_李远航



    /*unique,c++中的去重函数,返回值是数组末尾的地址,所以减去首地址是长度,
    在这道题中,先将树建起来,然后去除天数相同的数据,因为只有树上的路径才会影响到
    是否抗议,而天数相同的数据,视为抗议一次代码如下*/
    

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct s
    {
    	int u,v,w;
    }edge[100100];
    int pre[100100],a[100010];
    void init(int n)
    {
    	int i;
    	for(i=0;i<=n;i++)
    		pre[i]=i;
    }
    int cmp(s a,s b)
    {
    	return a.w>b.w;
    }
    int find(int x)
    {
    	if(x==pre[x])
    		return pre[x];
    	return pre[x]=find(pre[x]);
    }
    int main()
    {
    	int n,m;
    	while(scanf("%d%d",&n,&m)!=EOF)
    	{
    		int i;
    		init(n);
    		for(i=0;i<m;i++)
    		{
    			scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);	
    		}
    		sort(edge,edge+m,cmp);
    		int ans=0,cnt=0;
    		for(i=0;i<m;i++)
    		{
    			int fa=find(edge[i].u);
    			int fb=find(edge[i].v);
    			if(fa!=fb)
    			{
    				pre[fa]=fb;
    				a[cnt++]=edge[i].w;
    			}
    		}
    		ans=unique(a,a+cnt)-a;
    		printf("%d
    ",ans);
    	}
    }


  • 相关阅读:
    [LeetCode] Reverse Linked List II
    [LeetCode] Reverse Linked List
    [LeetCode] Palindrome Linked List
    人工智能之一《tensorflow》
    计算机视觉之《OpenCV开发环境搭建》
    Android Automotive开发之一《编译自己的SDK 》 // TOBEDONE
    Android Automotive开发之一《环境: JDK7&JDK8切换 》
    Android Auto开发之一《开始学习Auto 》
    网络安全之证书、密钥、密钥库等名词解释
    Android开发笔记之《特斯拉-Tesla 代码分析》
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273842.html
Copyright © 2011-2022 走看看