3362 数据结构实验之图论六:村村通公路

我会带着你远行 2022-06-04 06:44 276阅读 0赞

3362 数据结构实验之图论六:村村通公路

Time Limit: 1000MSMemory Limit: 65536KB

Problem Description

当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表,求使得每个村都有公路连通所需要的最低成本。

Input

连续多组数据输入,每组数据包括村落数目N(N <= 1000)和可供选择的道路数目M(M <= 3000),随后M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个村庄的编号和修建该道路的预算成本,村庄从1~N编号。

Output

输出使每个村庄都有公路连通所需要的最低成本,如果输入数据不能使所有村庄畅通,则输出-1,表示有些村庄之间没有路连通。

Example Input

  1. 5 8
  2. 1 2 12
  3. 1 3 9
  4. 1 4 11
  5. 1 5 3
  6. 2 3 6
  7. 2 4 9
  8. 3 4 4
  9. 4 5 6

Example Output

  1. 19
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define INF 0x3f3f3f3f
  5. int mmp[1010][1010];
  6. bool visit[1010];
  7. int lowcost[1010];
  8. int m,n;
  9. int sum,flag;
  10. void prime()
  11. {
  12. int k;
  13. int temp;
  14. visit[1]=true;
  15. for(int i=1;i<=m;i++)
  16. lowcost[i]=mmp[i][1];
  17. for(int i=2;i<=m;i++)
  18. {
  19. temp=INF;
  20. for(int j=1;j<=m;j++)
  21. {
  22. if(!visit[j]&&lowcost[j]<temp){
  23. temp=lowcost[j];
  24. k=j;
  25. }
  26. }
  27. if(temp==INF)
  28. {
  29. flag=1;
  30. break;
  31. }
  32. visit[k]=true;
  33. sum+=temp;
  34. for(int j=1;j<=m;j++)
  35. {
  36. if(!visit[j]&&lowcost[j]>mmp[j][k])
  37. lowcost[j]=mmp[j][k];
  38. }
  39. }
  40. }
  41. int main()
  42. {
  43. int v,u,cost;
  44. while(cin>>m>>n)
  45. {
  46. memset(mmp,INF,sizeof(mmp));
  47. memset(visit,false,sizeof(visit));
  48. flag=0;
  49. sum=0;
  50. for(int i=0;i<n;i++)
  51. {
  52. cin>>v>>u>>cost;
  53. mmp[v][u]= mmp[u][v]= cost;
  54. }
  55. prime();
  56. if(!flag)printf("%d\n",sum);
  57. else printf("-1\n");
  58. }
  59. }

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读