hdu 1863 畅通工程

简介: 点击打开链接hdu 1863 1思路:最小生成树+Prime 2注意:n是边数,m是点数。当m为0的时候输出的数“?”。 代码: #include#include#include#includeusing namespac...

点击打开链接hdu 1863


1思路:最小生成树+Prime

2注意:n是边数,m是点数。当m为0的时候输出的数“?”。


代码:

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 110
#define INF 0xFFFFFFF

int n , m;
long long ans;
long long G[MAXN][MAXN];
int vis[MAXN];
long long lowcost[MAXN];

/*判断是否满足*/
bool judge(){
     for(int i = 1 ; i <= m ; i++){
        if(!vis[i])
          return false;
     }  
     return true;
}

/*初始化点之间的距离为无穷大*/
void init(){
     for(int i = 1 ; i <= m; i++){
          for(int j =1 ; j <= m ; j++)
               G[i][j] = INF;
     }
}

void Prime(){
     int i , j , pos , flag;
     long long min;
     memset(vis , 0 , sizeof(vis));
     vis[1] = 1;
     ans = 0;
     for(i = 1 ; i <= m ; i++)
        lowcost[i] = G[1][i];
     for(i = 1 ; i <= m ; i++){
        min = INF;
        for(j = 1 ; j <= m ; j++){
           if(!vis[j] && lowcost[j] < min){
              min = lowcost[j];
              pos = j;
           } 
        }
        if(min == INF)
           break;
        ans += min;
        vis[pos] = 1;
        for(j = 1 ; j <= m ; j++){
           if(!vis[j] && lowcost[j] > G[pos][j])
              lowcost[j] = G[pos][j];
        }
     }
     if(judge())
       printf("%lld\n" , ans);
     else
       printf("?\n");
} 

int main(){
   // freopen("input.txt" , "r" , stdin);
    int a, b , c;
    while(scanf("%d%d" , &n , &m) && n){
         init();
         for(int i = 1 ; i <= n ; i++){
             scanf("%d%d%d" , &a , &b , &c);
             G[a][b] = G[b][a] = c;
         }
         if(m)
           Prime();
        else
           printf("?\n"); 
    }
    return 0;
}




目录
相关文章
|
6月前
|
Java 测试技术
HDU-1233-还是畅通工程
HDU-1233-还是畅通工程
38 0
畅通工程 HDU - 1232
畅通工程 HDU - 1232
79 0
|
测试技术
HDU-1232,畅通工程(并查集)
HDU-1232,畅通工程(并查集)
|
算法
HDU - 2063: 过山车
HDU - 2063: 过山车
143 0
|
Java 测试技术
HDU 1232 畅通工程
畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 50540    Accepted Submission(s): 26968 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。
1022 0
|
人工智能 Java C++
HDU 3785 寻找大富翁
寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6716    Accepted Submission(s): 2492 Problem Description 浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁.
1098 0