zoukankan      html  css  js  c++  java
  • 1348:【例4-9】城市公交网建设问题

    【题目描述】
    有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使得工程的总造价最少?
    【输入】
    n(城市数,1≤n≤100)
    e(边数)
    以下e行,每行3个数i,j,wij,表示在城市i,j之间修建高速公路的造价。
    【输出】
    n-1行,每行为两个城市的序号,表明这两个城市间建一条高速公路。
    【输入样例】
    5 8
    1 2 2
    2 5 9
    5 4 7
    4 1 10
    1 3 12
    4 3 6
    5 3 3
    2 3 8
    【输出样例】
    1  2
    2  3
    3  4
    3  5
    
    # include <bits/stdc++.h>
    using namespace std ;
    const int N = 100 ;
    const int M = N * N ;
    int n , m ;
    int fa[N] ;
    struct node {
    	int u , v , w ;
    }edge[M] , ans[N] ;
    inline int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]) ; } 
    inline void merge(int x , int y) { fa[find(x)] = find(y) ; return ; } 
    inline bool cmp(node x , node y) { return x.w < y.w ; }
    inline bool cmp2(node x , node y) { return x.u == y.u ? x.v < y.v : x.u < y.u ;}
    inline void kruskal() {
    	sort(edge + 1 , edge + m + 1 , cmp) ;
    	int cnt = 0 ;
    	for(register int i=1;i<=m;i++) {
    		int fx = find(edge[i].u) , fy = find(edge[i].v) ;
    		if(fx == fy) continue ;
    		merge(edge[i].u , edge[i].v) ;
    		++ cnt ; ans[cnt].u = edge[i].u , ans[cnt].v = edge[i].v , ans[cnt].w = edge[i].w ;
    	}
    	sort(ans + 1 , ans + cnt + 1 , cmp2) ;
    	for(register int i=1;i<=cnt;i++) {
    		printf("%d %d 
    " , ans[i].u , ans[i].v) ;
    	}
    	return ;
    }
    signed main() {
    	ios::sync_with_stdio(false) ;
    	cin >> n >> m ;
    	for(register int i=1;i<=n;i++) fa[i] = i ;
    	for(register int i=1;i<=m;i++) {
    		int u , v , w ;
    		cin >> u >> v >> w ;
    		if(u > v) swap(u , v) ;
    		edge[i] = node ({u , v , w}) ;
    	}
    	return kruskal() , 0 ;
    }
    
  • 相关阅读:
    apollo-springboot 整合使用
    axon 过滤存储哪些事件
    springtools 解决lombok
    mylog 自定义注解打印 logger
    java高级应用:线程池全面解析
    监控 Java 线程池运行状态
    线程池获当前使用的活跃线程数
    JVM调优总结 -Xms -Xmx -Xmn -Xss(1)
    java高并发之线程池
    Nginx 网络事件
  • 原文地址:https://www.cnblogs.com/qf-breeze/p/10875040.html
Copyright © 2011-2022 走看看