糯米

TI DaVinci, gstreamer, ffmpeg
随笔 - 167, 文章 - 0, 评论 - 47, 引用 - 0
数据加载中……

POJ 2377 Bad Cowtractors 最小生成树

思路:
典型的最小生成树,Prim搞定。但是速度好慢,用堆应该好一点。

#include <stdio.h>

int N, M;

struct node {
    
int idx, w;
    
struct node *next;
}
;
struct node edges[40032], *map[1024], *exists[1024][1024];
int edges_cnt;
char visited[1024];

__inline 
void add(int a, int b, int w)
{
    
struct node *p;

    
if (exists[a][b]) {
        
if (exists[a][b]->< w)
            exists[a][b]
->= w;
        
return ;
    }

    p 
= &edges[edges_cnt++];
    p
->idx = b;
    p
->= w;
    p
->next = map[a];
    map[a] 
= p;
    exists[a][b] 
= p;
}



int main()
{
    
int i, j, k, max_val, max_idx, sum;
    
struct node *p;

    freopen(
"e:\\test\\in.txt""r", stdin);

    scanf(
"%d%d"&N, &M);
    
while (M--{
        scanf(
"%d%d%d"&i, &j, &k);
        add(i, j, k);
        add(j, i, k);
    }

    visited[
1= 1;
    sum 
= 0;
    
for (k = 0; k < N - 1; k++{
        max_val 
= -1;
        
for (i = 1; i <= N; i++{
            
if (!visited[i])
                
continue;
            
for (p = map[i]; p; p = p->next)
                
if (!visited[p->idx] && p->> max_val) {
                    max_val 
= p->w;
                    max_idx 
= p->idx;
                }

        }

        
if (max_val == -1)
            
break;
        sum 
+= max_val;
        visited[max_idx] 
= 1;
    }


    printf(
"%d\n", k == N - 1 ? sum : -1);

    
return 0;
}

posted on 2010-03-09 14:11 糯米 阅读(282) 评论(0)  编辑 收藏 引用 所属分类: POJ


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理