POJ 2421(prim)

http://poj.org/problem?id=2421

这个题和poj1258是一样的,只要在1258的基础上那么几行代码,就可以A,水。

题意:还是n连通问题,和1258不同的就是这个还有几条路在之前就已经连通了的,所以不需要再去连。

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 
 5 #define inf 100009
 6 
 7 bool mark[1001];
 8 int a[1001][1001],dis[1001],ans,n;
 9 
10 int prim()
11 {
12    for(int i=1;i<=n;i++)
13     dis[i]=inf;dis[1]=0;
14     for(int i=1;i<=n;i++){
15         int tep=inf;int k=0;
16         for(int j=1;j<=n;j++){
17             if(mark[j]&&dis[j]<tep)
18             {
19                 tep=dis[j];
20                 k=j;
21             }
22         }
23         if(tep==inf) return 0;
24         ans+=tep;
25         mark[k]=false;
26         for(int j=1;j<=n;j++)
27             if(mark[j]&&dis[j]>a[k][j])
28                 dis[j]=a[k][j];
29        }
30    return 0;
31 }
32 
33 int main()
34 {
35     while(scanf("%d",&n)!=EOF)
36     {
37         int x=0,c,b;
38         memset(mark,true,sizeof(mark));
39         ans=0;
40         for(int i=1;i<=n;i++)
41             for(int j=1;j<=n;j++)
42                 scanf("%d",&a[i][j]);
43         scanf("%d",&x);
44         while(x--)
45         {
46             scanf("%d%d",&b,&c);
47             a[b][c]=0;
48             a[c][b]=0;
49         }
50         prim();
51         printf("%d
",ans);
52     }
53 }
原文地址:https://www.cnblogs.com/Tree-dream/p/5726457.html