zoukankan      html  css  js  c++  java
  • HDU 1875

    最小生成树

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    int t,n,cnt;
    double cost;
    int mapx[1005],mapy[1005];
    int f[1005];
    struct edge{
    	int a,b;
    	double e;
    } map[1000000];
    double cal(int& a,int& b)
    {
    	return sqrt(1.0*( (mapx[a]-mapx[b])*(mapx[a]-mapx[b]) + (mapy[a]-mapy[b])*(mapy[a]-mapy[b]) ));
    }
    bool cmp(edge a,edge b)
    {
    	return a.e<b.e;
    }
    int sf(int x){
    	return x==f[x]? x: f[x]=sf(f[x]);
    }
    int main()
    {
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		for(int i=1;i<=n;i++) f[i]=i;
    		cnt=0;
    		for(int i=1;i<=n;i++)
    		{
    			scanf("%d%d",&mapx[i],&mapy[i]);
    			for(int j=1;j<i;j++)
    			{
    				double e=cal(i,j);
    				if(e>=10&&e<=1000)
    				{
    					map[cnt].a=j;
    					map[cnt].b=i;
    					map[cnt].e=e;
    					cnt++;
    				}
    			}
    		}
    		sort(map,map+cnt,cmp);
    		cost=0;
    		int fa,fb;
    		for(int i=0;i<cnt;++i)
    		{
    			fa=sf(map[i].a);
    			fb=sf(map[i].b);
    			if(fa!=fb)
    			{
    				f[fa]=fb;
    				cost+=map[i].e;
    			}
    		}
    		int p=0;
    		for(int i=1;i<=n;i++) if(sf(f[i])==i) p++;
    		if(p>1) puts("oh!");
    		else printf("%.1lf
    ",cost*100);
    	}
    }
    
    我自倾杯,君且随意
  • 相关阅读:
    第11次作业
    第十次作业
    找回感觉的练习
    Tomact学习笔记
    移动端问题小计
    节流和防抖函数
    requestAnimationFrame动画封装
    svg实现渐变进度圆环
    手机端判断安卓,iso,微信
    git常用指令
  • 原文地址:https://www.cnblogs.com/nicetomeetu/p/5551369.html
Copyright © 2011-2022 走看看