码迷,mamicode.com
首页 > 其他好文 > 详细

(SCOI2005)BZOJ1083 繁忙的都市

时间:2016-05-15 00:18:19      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

题意:求使图成为连通图的最小代价

 

正解:kruskal最小生成树算法

 

又是一道模板水题,最小生成树直接水过。

 

//It is made by jump~
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int n,m,total,maxl;
int father[311];
 
struct node{
        int u,to,w;  
}jump[300011];
 
int getint()
{
       int w=0,q=0;
       char c=getchar();
       while((c<‘0‘ || c>‘9‘) && c!=‘-‘) c=getchar();
       if (c==‘-‘)  q=1, c=getchar();
       while (c>=‘0‘ && c<=‘9‘) w=w*10+c-‘0‘, c=getchar();
       return q ? -w : w;
}
  
bool cmp(node a,node b) { return a.w<b.w; }
  
int find(int x){
      if(father[x]!=x)  father[x]=find(father[x]);
      return father[x];    
} 
 
void hebing(int x,int y){
      father[y]=x;   
}
 
int main()
{
    n=getint();m=getint();
    for(int i=1;i<=m;i++) {
        jump[i].u=getint();jump[i].to=getint();jump[i].w=getint();        
    }
    for(int i=1;i<=n;i++) father[i]=i;
    sort(jump+1,jump+m+1,cmp);
    for(int i=1;i<=m;i++){
        int r1=find(jump[i].u),r2=find(jump[i].to);
        if(r1!=r2) {
            hebing(r1,r2);
            if(jump[i].w>maxl) maxl=jump[i].w;
            total++;           
        }
    }
     
    printf("%d %d",total,maxl);
    return 0;
}

  

(SCOI2005)BZOJ1083 繁忙的都市

标签:

原文地址:http://www.cnblogs.com/ljh2000-jump/p/5493996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!