POJ 最小生成树专辑

博客汇集了最小生成树题目,如POJ 2845 Highways 。提到用并查集解最小生成树的胚胎级题目,做题时要注意结构体的s开的范围大于N*N/2,否则会出现Runtime error;用algorithm头文件时,勿用max作变量名,否则会CE。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最下生成树题目汇集:

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 }

 

 

 更新中。。。

转载于:https://www.cnblogs.com/heat-man/archive/2013/03/20/2971716.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值