蓝桥杯历届试题(2014) REV-22 国王的烦恼

认真审题,此题用的是并查集……不要问我为什么……

问题描述

  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。

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,m;
 5 int father[10000+5];
 6 struct bridge{
 7     int sta;
 8     int endd;
 9     int t;
10 }bri[100000+5];
11 int cmp(bridge a,bridge b){
12     return a.t>b.t;
13 }
14 void set(){//父节点初始化(最开始的父节点为自身) 
15     for(int i=1;i<=n;i++){
16         father[i]=i;
17     }
18     return;
19 }
20 //并查集 
21 int find(int a){//递归找根节点 
22     if(father[a]==a)//父节点为自身的节点是根节点 
23         return a;
24     return find(father[a]);
25 }
26 int unionbridge(int a,int b){//判断是否为同一颗树,实际上就是判断去掉该桥之后,两点还能否直接(间接)到达 
27     int fa=find(a);
28     int fb=find(b);
29     if(fa!=fb){//合并非同一根节点的树,也就是不能到达的情况 
30         father[fa]=fb;
31         return 1;
32     }
33     return 0;//能直接(间接)到达 
34 }
35 
36  
37 int main(){
38     cin>>n>>m;
39     int num=m;
40     int a,b,t;
41     int i=1;
42     while(num--){
43         cin>>a>>b>>t;
44         bri[i].sta=a;
45         bri[i].endd=b;
46         bri[i].t=t;
47         i++;
48     }
49     int pre=-1;
50     int ans=0;
51     sort(bri+1,bri+m+1,cmp); 
52     set();
53     for(int i=1;i<=m;i++){
54         if(unionbridge(bri[i].sta,bri[i].endd)&&pre!=bri[i].t){//判断会不会出事,同时记录闹事天数 
55             ans++;
56             pre=bri[i].t;
57         }
58     }
59     cout<<ans<<endl;
60     
61     
62 } 

猜你喜欢

转载自www.cnblogs.com/memocean/p/12723376.html