• POJ 2377


      1 #include<stdio.h>
      2 #define MAXN 1005
      3 #include<iostream>
      4 #include<algorithm>
      5 #define inf 10000000
      6 using namespace std;
      7 int _m[MAXN][MAXN];
      8 int low_cost[MAXN];
      9 int pre[MAXN];
     10 unsigned prime(int n);
     11 int DFS(int i,int sum,int p);
     12 bool mark[MAXN];
     13 int main()
     14 {
     15     //freopen("acm.acm","r",stdin);
     16     int p;
     17     int edge;
     18     unsigned tem;
     19     int i;
     20     int j;
     21     int u;
     22     int v;
     23     while(cin>>p>>edge)
     24     {
     25         memset(mark,false,sizeof(mark));
     26         for(i = 0; i < p; ++ i)
     27         {
     28             for(j = 0; j < p; ++ j)
     29                 _m[i][j] = inf;
     30         }
     31         for(i = 0; i < edge; ++ i)
     32         {
     33             cin>>u>>v;
     34             -- u;
     35             -- v;
     36             cin>>tem;
     37             if(_m[u][v] == inf)
     38             {
     39                 _m[u][v] = tem;
     40                 _m[u][v] *= -1;
     41                 _m[v][u] = _m[u][v];
     42             }
     43             else
     44                 if(tem > _m[u][v]*(-1))
     45                 {
     46                     _m[u][v] = tem;            
     47                     _m[u][v] *= -1;
     48                     _m[v][u] = _m[u][v];
     49                 }
     50         }
     51         mark[0] = true;
     52         tem = -prime(p);
     53         if(DFS(0,1,p) == p)
     54             cout<<tem<<endl;
     55         else
     56             cout<<-1<<endl;
     57     }
     58 }
     59 int DFS(int i,int sum,int n)
     60 {
     61     int j;
     62     for(j = 0; j < n; ++ j)
     63     {
     64         if(i != j && _m[i][j] != inf && !mark[j])
     65         {
     66             mark[j] = true;
     67             sum = DFS(j,sum+1,n);
     68         }
     69     }
     70     return sum;
     71 }
     72 unsigned prime(int n)
     73 {
     74     int i;
     75     int j;
     76     int k;
     77     unsigned sum = 0;
     78     int min;
     79     for(i = 1; i < n; ++ i)
     80     {
     81         low_cost[i] = _m[0][i];
     82         pre[i] = 0;
     83     }
     84     for(i = 1; i < n; ++ i)
     85     {
     86         min = inf;
     87         for(j = 1; j < n; ++ j)
     88         {
     89             if(low_cost[j]&&low_cost[j] < min)
     90             {
     91                 k = j;
     92                 min = low_cost[j];
     93             }
     94         }
     95         sum += low_cost[k];
     96         low_cost[k] = 0;
     97         for(j = 1; j < n; ++ j)
     98         {
     99             if(_m[k][j] < low_cost[j] && low_cost[j])
    100             {
    101                 low_cost[j] = _m[k][j];
    102                 pre[j] = k;
    103             }
    104         }
    105     }
    106     return sum;
    107 }
  • 相关阅读:
    网页媒体播放利器
    iframe截取网站部分内容实现思路及代码
    网站如何添加访客统计代码
    Javascript写入txt和读取txt文件示例
    常见JS挂马方法及如何防止网站被黑客挂马?
    最新挂木马的10大操作方法
    Javascript教程:js异步模式编程的4种解决方法
    JavaScript对象属性的基础教程指南
    jsp中的JSTL与EL表达式用法
    Java 连接 SqlServer工具类
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4568376.html
Copyright © 2020-2023  润新知