zoukankan      html  css  js  c++  java
  • 最大生成树kruskal——pku3723

    从点的角度考虑,因为要使男女的点都要经过,所以男的点要是加上女生的人数的人数,遍历只要生成最大生成树,树的路径和就是可以节约的钱了……kruskal+并查集,效率较高
    ps:要是不加#include<iostream>的话,用c++提交会有错,g++就没事,所以用c++提交不要忘了加上#include<iostream>
    View Code
    #include<stdio.h>
    #include
    <algorithm>
    #include
    <iostream>
    using namespace std;

    int f[20005],k,n,m;
    struct data
    {
    int v;
    int to;
    int w;
    }edge[
    50005];

    int cmp(data a,data b)
    {
    return a.w>b.w;
    }

    int find(int pos)
    {
    if(f[pos]==-1) return pos;
    return f[pos]=find(f[pos]);
    }

    int un(int a,int b)
    {
    int fa=find(a),fb=find(b);
    if(fa==fb) return 0;
    f[fa]
    =fb; return 1;
    }

    void krus()
    {
    int add=0,i;
    sort(
    &edge[1],&edge[k+1],cmp);
    for(i=1;i<=k;i++)
    {
    if(un(edge[i].v,edge[i].to)==1)
    add
    +=edge[i].w;
    }
    printf(
    "%d\n",(n+m)*10000-add);
    }

    int main()
    {
    int i,j,t;
    scanf(
    "%d",&t);
    while(t--)
    {
    scanf(
    "%d%d%d",&n,&m,&k);

    for(i=1;i<=n+m;i++)
    f[i]
    =-1;
    for(i=1;i<=k;i++)
    {
    scanf(
    "%d%d%d",&edge[i].v,&edge[i].to,&edge[i].w);
    edge[i].v
    +=1;
    edge[i].to
    +=n+1;
    }

    krus();
    }
    }
  • 相关阅读:
    分解质因数算法
    js 的 Math 对象
    字符串操作
    简化求质数算法
    数值类型小数点后是否可以接零问题
    新博第一篇,思考的重要性与求质数算法
    一、制作屏幕录像
    四、同步线程
    常见问题
    jni数据处理
  • 原文地址:https://www.cnblogs.com/huhuuu/p/1958381.html
Copyright © 2011-2022 走看看