Status | Accepted |
---|---|
Time | 407ms |
Memory | 836kB |
Length | 1183 |
Lang | C++ |
Submitted | 2016-12-11 15:54:15 |
Shared | |
RemoteRunId | 16382911 |
Select Code
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int f[21010];
//前n-1个表示女孩,从n+0个表示男孩
struct note
{
int x;
int y;
int d;
};
struct note e[51010];
int m,n;
bool cmp(note x,note y)
{
return x.d>y.d;
}
int getf(int v)
{
if(f[v]==v)
return v;
else
{
f[v]=getf(f[v]);
return f[v];
}
}
int merge(int v,int u)
{
int t1,t2;
t1=getf(v);
t2=getf(u);
if(t1!=t2)
{
f[t2]=t1;
return 1;
}
return 0;
}
void init()
{
int i;
for(i=0;i<m+n;i++)
f[i]=i;
return;
}
int main()
{
int k,decrease,i,r,count;
scanf("%d",&k);
while(k--)
{
count=0;decrease=0;
scanf("%d%d%d",&n,&m,&r);
init(); //错误写法:将init()写在了n,m的赋值之前,导致初始化错误
for(i=0;i<r;i++)
{
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].d);
e[i].y+=n;
}
sort(e,e+r,cmp); //错误写法 sort(e,e+r-1,cmp);
for(i=0;i<r;i++)
{
if(merge(e[i].x,e[i].y))
{
count++;
decrease+=e[i].d;
}
if(count==m+n-1)
break;
}
printf("%d\n",10000*(m+n)-decrease);
}
return 0;
}