zoukankan      html  css  js  c++  java
  • 洛谷P3366最小生成树

    传送门啦

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define re register
    using namespace std;
    const int maxn = 5005;
    const int maxm = 200005;
    
    inline int read(){
    	char ch = getchar();
    	int f = 1 , x = 0;
    	while(ch > '9' || ch < '0' ){if(ch == '-') f = -1;ch = getchar();}
    	while(ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + ch - '0' ;ch = getchar();}
    	return x * f;
    }
    
    int n,m,x,y,z;
    int head[maxn],tot;
    int cnt,ans,fa[maxn];
    
    struct Edge{
    	int from,to,val,next;
    }edge[maxm << 1];
    
    inline void add(int u , int v, int  w){
    	edge[++tot].from = u ;
    	edge[tot].to = v;
    	edge[tot].val = w;
    	edge[tot].next = head[u];
    	head[u] = tot;
    }
    
    inline void init(){
    	for(re int i = 1 ; i <= n ; ++i)
    		fa[i] = i ;
    }
    
    inline int find(int x){
    	if(x != fa[x])  fa[x] = find(fa[x]);
    	return fa[x];
    }
    
    inline bool cmp(Edge a , Edge b){
    	return a.val < b.val ;
    }
    
    int main(){
    	n = read() ; m = read();
    	for(re int i = 1 ; i <= m ; ++i) {
    		x = read(); y = read(); z = read();
    		add(x , y , z);
    		add(y , x , z);
    	}
    	init();
    	sort(edge + 1 , edge + 1 + tot , cmp);
    	for(re int i = 1 ; i <= tot ; ++i){
    		int f1 = find(edge[i].from) , f2 = find(edge[i].to);
    		if(f1 != f2) {
    			cnt++;
    			fa[f1] = f2;
    			ans += edge[i].val ;
    		}
    		if(cnt == n - 1) break;
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    php $_SERVER 中的 QUERY_STRING和REQUEST_URI
    php 弱类型比较
    php函数漏洞
    web源码泄露
    sqlmap 基本使用步骤(一)
    php 调用远程url
    $_POST 和 php://input 的区别
    poj 3461 Oulipo (KMP入门)
    hdu 5417 Victor and Machine
    HDU 1885 Key Task (bfs)
  • 原文地址:https://www.cnblogs.com/Stephen-F/p/9930410.html
Copyright © 2011-2022 走看看