首页 > 代码库 > bzoj 1083 繁忙的都市

bzoj 1083 繁忙的都市

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1083

题解:

  在bzoj里能遇到如此如此水的题真是不容易……

  乍一看好像有点吓人,其实是一道Kruskal模板题……

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 #define MAXN 1010
 5 int n,m,cnt,fa[MAXN],ans;
 6 struct edge
 7 {
 8     int u,v,val;
 9 }e[MAXN*100];
10 void add(int x,int y,int z)
11 {
12     e[++cnt]={x,y,z};
13 }
14 bool cmp(edge a,edge b)
15 {
16     return a.val<b.val?true:false;
17 }
18 int getfa(int x)
19 {
20     return fa[x]=fa[x]==x?x:getfa(fa[x]);
21 }
22 inline int max(int x,int y)
23 {
24     return x>y?x:y;
25 }
26 int main()
27 {
28     scanf("%d%d",&n,&m);
29     int x,y,z;
30     for(int i=1;i<=m;i++)
31     {
32         scanf("%d%d%d",&x,&y,&z);
33         add(x,y,z);
34         add(y,x,z);
35     }
36     m=cnt;
37     cnt=1;
38     sort(e,e+m,cmp);
39     for(int i=1;i<=n;i++)fa[i]=i;
40     for(int i=1;i<=m;i++)
41     {
42         x=getfa(e[i].u);
43         y=getfa(e[i].v);
44         if(x!=y)
45         {
46             fa[y]=x;
47             cnt++;
48             ans=max(ans,e[i].val);
49             if(cnt==n)break;
50         }
51     }
52     printf("%d %d",n-1,ans);
53     return 0;
54 }

 

bzoj 1083 繁忙的都市