মঙ্গলবার, ২১ ফেব্রুয়ারী, ২০১৭

UVA 10034 Freckles

#include<bits/stdc++.h>
using namespace std;
long i;
double ans=0.0;
struct st
{
    long a,b;
    double wt;
    bool operator < ( const st&ck) const
    {
        return wt<ck.wt;
    }
};
vector<st>vec;
long ar[100007];
long  find(long r)
{
   return (ar[r]==r) ? r:  find(ar[r]);
}
long mst(long n1)
{
    sort(vec.begin(),vec.end());
    for(i=1;i<=n1;i++)
    ar[i]=i;
    long  count=0;
    ans=0;
    for(i=0;i<(long)vec.size();i++)
    {
        long a=find(vec[i].a);
        long b=find(vec[i].b);
        if(a!=b)
        {
            ar[a]=b;
            count++;
            ans+=vec[i].wt;
            if(count==n1-1)
            break;
        }
    }
}
main()
{
    long ts,cs=0;
    cin>>ts;
    while(ts--)
    {
        long node,j;
        cin>>node;
        double x[100003],y[100009];
        double rs;
        if(cs>0)
            cout<<endl;
        cs++;
        for(i=0;i<node;i++)
        {
            cin>>x[i]>>y[i];
        }
        for(i=0;i<node;i++)
        {
            for(j=i+1;j<node;j++)
            {
                rs=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
                st edge;
                edge.a=i+1;
                edge.b=j+1;
                edge.wt=rs;
                vec.push_back(edge);
            }
        }
        mst(node);
        printf("%.2lf\n",ans);
        vec.clear();
    }
}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...