觉得浮夸了四年,漠然发现原来是浮躁了四年!

POJ 最小生成树专辑

最下生成树题目汇集:

POJ 2845 Highways     http://poj.org/problem?id=2485

最小生成树(并查集解)胚胎级题目:还行没忘完,还算顺利:

注意结构体的s开的范围要大于N*N/2;(Runtime error)

用algorithm 的头文件时,不要用max作变量名称;(CE)

View Code
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 #define N 505
 7 int map[N][N];
 8 int f[N];
 9 int t,n;
10 int Max;
11 struct node{
12   int    num1,num2,len;
13 }s[255555];
14 bool cmp(node a,node b)
15 {
16     return a.len<b.len;
17 }
18 void sequence(int x)
19 {
20     for(int i=1;i<=n;i++)
21         f[i]=i;
22 }
23 int find(int x)
24 {
25     if(x!=f[x])
26        f[x]=find(f[x]);
27     return f[x];
28 }
29 void Union(int x,int y,int index)
30 {
31     x=find(x);
32     y=find(y);
33     if(x!=y)
34     {
35         f[x]=y;
36         if(index>Max)
37             Max=index;
38     }
39 }
40 int main()
41 {
42     int i,j;
43     scanf("%d",&t);
44     while(t--)
45     {
46     
47         memset(map,0,sizeof(map));
48         scanf("%d",&n);    
49         sequence(n);
50         for(i=1;i<=n;i++)
51             for(j=1;j<=n;j++)
52             {
53                 scanf("%d",&map[i][j]);
54             }
55         int k=0;
56         for(i=1;i<=n;i++)
57             for(j=i+1;j<=n;j++)
58             {
59                 s[k].num1=i;
60                 s[k].num2=j;
61                 s[k].len=map[i][j];
62                 k++;
63             }
64             sort(s,s+k,cmp);
65         //    for(i=0;i<k;i++)
66         //    {
67         //        cout<<s[i].num1<<" "<<s[i].num2<<" "<<s[i].len<<endl;
68         //    }
69             Max=0;
70             for(i=0;i<k;i++)
71             {
72                 Union(s[i].num1,s[i].num2,s[i].len);
73             }
74             printf("%d\n",Max);
75     }
76     return 0;
77 }

 

 

 更新中。。。

posted @ 2013-03-20 18:44  heat nan  阅读(226)  评论(0)    收藏  举报