日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

N - 畅通工程再续 - hdu 1875

發(fā)布時(shí)間:2023/12/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 N - 畅通工程再续 - hdu 1875 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

相信大家都聽(tīng)說(shuō)一個(gè)“百島湖”的地方吧,百島湖的居民生活在不同的小島中,當(dāng)他們想去其他的小島時(shí)都要通過(guò)劃小船來(lái)實(shí)現(xiàn)。現(xiàn)在政府決定大力發(fā)展百島湖,發(fā)展首先要解決的問(wèn)題當(dāng)然是交通問(wèn)題,政府決定實(shí)現(xiàn)百島湖的全暢通!經(jīng)過(guò)考察小組RPRush對(duì)百島湖的情況充分了解后,決定在符合條件的小島間建上橋,所謂符合條件,就是2個(gè)小島之間的距離不能小于10米,也不能大于1000米。當(dāng)然,為了節(jié)省資金,只要求實(shí)現(xiàn)任意2個(gè)小島之間有路通即可。其中橋的價(jià)格為 100元/米。

Input

輸入包括多組數(shù)據(jù)。輸入首先包括一個(gè)整數(shù)T(T <= 200),代表有T組數(shù)據(jù)。?
每組數(shù)據(jù)首先是一個(gè)整數(shù)C(C <= 100),代表小島的個(gè)數(shù),接下來(lái)是C組坐標(biāo),代表每個(gè)小島的坐標(biāo),這些坐標(biāo)都是 0 <= x, y <= 1000的整數(shù)。?

Output

每組輸入數(shù)據(jù)輸出一行,代表建橋的最小花費(fèi),結(jié)果保留一位小數(shù)。如果無(wú)法實(shí)現(xiàn)工程以達(dá)到全部暢通,輸出”oh!”.

Sample Input

2 2 10 10 20 20 3 1 1 2 2 1000 1000

Sample Output

1414.2 oh!分析:看題意可以明白只要在任意個(gè)合法的橋之間加上邊,進(jìn)行最小生成樹(shù)求解即可,注意要判斷無(wú)法構(gòu)成生成樹(shù)的情況。************************************注意:不能用int提高精度判定,只能使用double..要不就會(huì)WA#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<math.h>
using?namespace?std;

const?int?maxn?=?105;
const?double?oo?=?0x7fffffff;

double?G[maxn][maxn];
struct?point{int?x,?y;}p[maxn];

double?Len(point?a,?point?b)//求兩個(gè)小島的距離,不合法返回oo
{
????int?x?=?a.x-b.x;
????int?y?=?a.y-b.y;
????double?l?=?sqrt(x*x?+?y*y);

????if(l>=10.0?&&?l<=1000.0)
????????return?l;//合法范圍
????return?oo;
}
double?Prim(int?N)
{
????int?vis[maxn]={0,?1};
????int?i,?T?=?N-1;
????double?dist[maxn],?ans?=?0;

????for(i=1;?i<=N;?i++)
????????dist[i]?=?G[1][i];
????while(T--)
????{
????????int?k?=?-1;
????????double?mini?=?oo;

????????for(i=1;?i<=N;?i++)
????????{
????????????if(!vis[i]?&&?mini?>?dist[i])
????????????????mini?=?dist[i],?k=i;
????????}

????????if(k?==?-1)return?-1;
????????vis[k]?=?true,?ans?+=?mini;

????????for(i=1;?i<=N;?i++)if(!vis[i])
????????????dist[i]?=?min(dist[i],?G[k][i]);
????}

????return?ans;
}

int?main()
{
????int?T;

????scanf("%d",?&T);

????while(T--)
????{
????????int?i,?j,?N;

????????scanf("%d",?&N);

????????for(i=1;?i<=N;?i++)
????????????scanf("%d%d",?&p[i].x,?&p[i].y);

????????for(i=1;?i<=N;?i++)
????????for(j=i;?j<=N;?j++)
????????{
????????????if(j?==?i)G[i][j]?=?0.0;
????????????else?G[i][j]?=?G[j][i]?=?Len(p[i],?p[j]);
????????}

????????double?ans?=?Prim(N);

????????if(ans?<?0)
????????????printf("oh!\n");
????????else
????????????printf("%.1f\n",?ans*100?);
????}

????return?0;?

}

?

轉(zhuǎn)載于:https://www.cnblogs.com/liuxin13/p/4676170.html

總結(jié)

以上是生活随笔為你收集整理的N - 畅通工程再续 - hdu 1875的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。