データセットを検索します.


   《  !  》

//        ,       
#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; }