poj3723Conscription kruskal模板水题

//N个女孩,M个男孩,雇佣一个人的费用为10000
//男孩与女孩之间的关系为d,那么如果雇佣了一个,雇佣另一个的费用为10000-d
//每个人只能通过一种关系优惠
//问最少需要花费多少雇佣这些人
//很明显的最大生成树
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std ;
const int maxn = 50010 ;
struct node
{
    int u , v , w ;
}edge[maxn];
bool cmp(node a , node b)
{
    return a.w > b.w ;
}
int F[maxn*2] ;
int find(int x)
{
    if(F[x] == -1)return x ;
    return F[x] = find(F[x]) ;
}
int r ;int n , m ;
int kruskal()
{
    int ans = 0 ;
    for(int i = 1;i <= r;i++)
    {
        int fu = find(edge[i].u) ;
        int fv = find(edge[i].v) ;
        if(fu == fv)continue ;
        ans += edge[i].w ;
        F[fu] = fv ;
    }
  return ans ;
}
int main()
{
    //freopen("in.txt" , "r" , stdin) ;
    int t ;
    scanf("%d" , &t) ;
    while(t--)
    {
        scanf("%d%d%d" , &n , &m , &r) ;
        memset(F , -1 , sizeof(F)) ;
        for(int i = 1;i <= r;i++)
        {
            scanf("%d%d%d" , &edge[i].u , &edge[i].v , &edge[i].w) ;
            edge[i].v += maxn ;
        }
        sort(edge + 1 , edge + 1 + r , cmp) ;
        int ans =  kruskal()  ;
        cout<<(n+m)*10000 - ans<<endl;
    }
    return 0 ;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 15:55:18

poj3723Conscription kruskal模板水题的相关文章

HDU 1879--继续畅通工程【kruskal &amp;&amp; 最小生成树 &amp;&amp; 水题】

继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17798    Accepted Submission(s): 7662 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列

ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)

1061: 从三个数中找出最大的数Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 124[Submit][Status][Web Board] Description 定义一个带参的宏(或者模板函数),从三个数中找出最大的数. Input 3个短整型数,空格隔开 3个实数,空格隔开 3个长整数,空格隔开 Output 最大的数,对于实数保留2位小数. Sample Input 1 2 3 1.5 4.7 3.2 123456

poj水题-1002 STL是神器,得用啊

很简单的一个,就是总超时.问题出在我使用的短平快,简单直接的方式已经不灵了. 这种情况我总结以下原因: 1.尽量用STL模板容器,qsort()等内置,他们优化得很好 2.不用的话需要了解哈希算法. 本题用了快排与哈希,自己写也行(麻烦),不写的话用qsort与STL map,否则超时.我用的当然是模板,短平快解决战斗. #include <iostream> #include <map> #include <string> using namespace std; s

ytu 1064: 输入三个字符串,按由小到大的顺序输出(水题,字符串处理)

1064: 输入三个字符串,按由小到大的顺序输出Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 471  Solved: 188[Submit][Status][Web Board] Description 输入三个字符串,按由小到大的顺序输出.分别使用指针和引用方式实现两个排序函数.在主函数中输入和输出数据. Input 3行字符串 Output 按照从小到大输出成3行.由指针方式实现. 按照从小到大输出成3行.由引用方式实现. Sample In

ACM :漫漫上学路 -DP -水题

CSU 1772 漫漫上学路 Time Limit: 1000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Submit Status Description 对于csuxushu来说,能够在CSU(California State University)上学是他一生的荣幸.CSU校园内的道路设计的十分精巧,由n+1条水平道路和n+1条竖直道路等距交错而成,充分体现了校园深厚的文化底蕴.然而不幸的是CS市每到夏季,天降大雨,

刷了500道水题是什么体验?

并没有什么卵用. 我马上大二了,大一两学期目测切了1000道水题了,毫无意义. 至今不理解kmp和后缀数组,只会模板.数论和博弈论是什么?能吃吗?只会打表.图论至今不会tarjan,话说dlx是什么?插头dp,这是什么?数据结构还好,经常做高中生的题,可持久化可持久化线段树也能花一下午时间写出来,然而并不会考. 平时做题只刷水题,遇到难题的时候,随手搜题解,看了看,哇,这居然能这么搞!然后抄一遍别人代码,交上去ac. cf一年几乎没缺过,花了大一上半年时间才滚上div1.然而至今紫号一堆,黄名一

hdu Courses 1083 二分匹配 ,匈牙利算法。。水题

Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4233    Accepted Submission(s): 2014 Problem Description Consider a group of N students and P courses. Each student visits zero, one or

2015南阳CCPC L - Huatuo&#39;s Medicine 水题

L - Huatuo's Medicine Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Huatuo was a famous doctor. He use identical bottles to carry the medicine. There are different types of medicine. Huatuo put medicines into the bottles and chain these b

sdut 2841 Bit Problem (水题)

题目 贴这个题是因为看题解有更简单的方法, 我做的时候是直接算的, 也很简单. 贴一下题解吧: 如果一个整数不等于 0,那么该整数的二进制表示中至少有一位是 1. 这个题结果可以直接输出 x - (x&(x-1)); 因为x-1 之后二进制下,就是最右边的1变成了0, 最右边的1的 右边所有的0变成了1, 不影响最左边. 我的代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4