http://poj.org/problem?id=3723
题意:给定n个男生和m个女生的关系,各个关系具有一定的权值,然后要挑选出所有人,每个人的代价是10000,但挑选人的过程中这些权值就是可以用来减去费用,求cost的min
#include<cstdio> #include<string> #include<iostream> #include<algorithm> using namespace std; const int M=5e4+5; const int N=1e4+4; struct node{ int u,v,w; }e[M]; int fa[N<<1]; bool cmp(node p,node q){ return p.w>q.w; } int find(int x){ return x==fa[x]?x:fa[x]=find(fa[x]); } int main(){ int t; scanf("%d",&t); while(t--){ int n,m,k; scanf("%d%d%d",&n,&m,&k); for(int i=0;i<k;i++){ int u,v,w; scanf("%d%d%d",&u,&v,&w); v+=n; e[i].u=u; e[i].v=v; e[i].w=w; } for(int i=0;i<2*n;i++) fa[i]=i; sort(e,e+k,cmp); int ans=0,countt=0; for(int i=0;i<k;i++){ int u=e[i].u,v=e[i].v; int a=find(u),b=find(v); if(a!=b){ fa[a]=b; ans+=e[i].w; } } printf("%d\n",(n+m)*10000-ans); } return 0; }