zoukankan      html  css  js  c++  java
  • poj 3625 Building Roads (最小生成树)

    点击打开链接

    坐标类型的最小生成树

    注意,所有的距离用double,所有的int用__int64

    #include"stdio.h"
    #include"math.h"
    #include"string.h"
    #define INF 100000000
    double map[1001][1001],f[1001];
    int mark[1001],n;
    void prime()
    {
    	__int64 i,j,k;
    	double min,ans;
    	memset(mark,0,sizeof(mark));
    	for(i=1;i<=n;i++)
    		f[i]=map[1][i];
    	f[1]=0;
    	mark[1]=1;
    	ans=0;
    	for(i=1;i<n;i++)
    	{
    		min=INF;
    		for(j=1;j<=n;j++)
    		{
    			if(!mark[j]&&f[j]<min)
    			{
    				min=f[j];k=j;
    			}
    		}
    		ans+=min;
    		mark[k]=1;
    		for(j=1;j<=n;j++)
    		{
    			if(!mark[j]&&map[k][j]<f[j])
    				f[j]=map[k][j];
    		}
    	}
    	printf("%.2f\n",ans);
    }
    int main()
    {
    	__int64 m,i,j,x[1001],y[1001],a,b;
    	while(scanf("%I64d%I64d",&n,&m)!=-1)
    	{
    		memset(map,76,sizeof(map));
    		for(i=1;i<=n;i++)
    			scanf("%I64d%I64d",&x[i],&y[i]);
    		for(i=1;i<=n;i++)
    		{
    			for(j=i+1;j<=n;j++)
    				map[j][i]=map[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
    		}
    		for(i=0;i<m;i++)
    		{
    			scanf("%I64d%I64d",&a,&b);
    			map[a][b]=map[b][a]=0;
    		}
    		
    		prime();
    	}
    	return 0;
    }


  • 相关阅读:
    基本运算符和if判断
    数据类型
    Day 5内存管理,定义变量
    Day 4 变量常量
    编辑语言的分类
    硬盘工作原理
    计算机组成原理
    hdu5293 lca+dp+树状数组+时间戳
    hdu5290树形dp
    hdu5294 网络流+dijskstr
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365302.html
Copyright © 2011-2022 走看看