データセットを検索します.
4990 ワード
《 ! 》
// ,
#include
using namespace std;
int f[1000]={0},n,m,k,sum;//sum:
// ,
void init()
{
int i;
for(int i=1;i<=n;i++)
f[i]=i;
return ;
}
// father , father,
//“ ”
int getf(int v)
{
if(f[v]==v)
return v;
else
{
/* , , “boss”
, boss ,
( , , father ) */
/* : ( ), father( )
, boss boss himself */
f[v]=getf(f[v]);
return f[v];
}
}
// ( )
void merge(int v,int u)
{
int t1,t2;//t1,t2 v,u big boss
t1=getf(v);
t2=getf(u);
if(t1!=t2)// ( : )
{
f[t1]=t2;
//
// , f[u] v f[t1]
}
return;
}
// :
int main()
{
int i,x,y;
scanf("%d %d",&n,&m);
//
init();
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);//x,y
merge(x,y);
}
//
// , boss, boss,
for(int i=1;i<=n;i++)
{
if(f[i]==i)
sum++;
}
printf("%d
",sum);
return 0;
}
kruskyal(部分)struct node{
LL f,t,c;
}e[size];
bool cmp(node a,node b)
{
return a.c//
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void kru()
{
sort(e+1,e+m+1,cmp);
for(int i=1;i<=m;i++) //
{
LL fx=find(e[i].f),fy=find(e[i].t);
if(fx!=fy)
{
fa[fx]=fy;
ans+=e[i].c;
}
}
printf("%lld
",ans);
}
int main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%lld%lld%lld",&e[i].f,&e[i].t,&e[i].c);
}
for(int i=1;i<=n;i++) //
fa[i]=i;
kru();
return 0;
}