麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

BZOJ 1821 Group 部落劃分 Group【二分+并查集】

2019-11-14 12:31:48
字體:
來源:轉載
供稿:網友

1821: [JSOI2010]Group 部落劃分 Group

Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2170  Solved: 1028[Submit][Status][Discuss]

Description

聰聰研究發現,荒島野人總是過著群居的生活,但是,并不是整個荒島上的所有野人都屬于同一個部落,野人們總是拉幫結派形成屬于自己的部落,不同的部落之間則經常發生爭斗。只是,這一切都成為謎團了——聰聰根本就不知道部落究竟是如何分布的。 不過好消息是,聰聰得到了一份荒島的地圖。地圖上標注了N個野人居住的地點(可以看作是平面上的坐標)。我們知道,同一個部落的野人總是生活在附近。我們把兩個部落的距離,定義為部落中距離最近的那兩個居住點的距離。聰聰還獲得了一個有意義的信息——這些野人總共被分為了K個部落!這真是個好消息。聰聰希望從這些信息里挖掘出所有部落的詳細信息。他正在嘗試這樣一種算法: 對于任意一種部落劃分的方法,都能夠求出兩個部落之間的距離,聰聰希望求出一種部落劃分的方法,使靠得最近的兩個部落盡可能遠離。 例如,下面的左圖表示了一個好的劃分,而右圖則不是。請你編程幫助聰聰解決這個難題。 

Input

第一行包含兩個整數N和K(1< = N < = 1000,1< K < = N),分別代表了野人居住點的數量和部落的數量。接下來N行,每行包含兩個正整數x,y,描述了一個居住點的坐標(0 < =x, y < =10000)

Output

輸出一行,為最優劃分時,最近的兩個部落的距離,精確到小數點后兩位。

Sample Input

4 20 00 11 11 0

Sample Output

1.00

HINT

Source

JSOI2010第二輪Contest1

思路:

首先,考慮這個距離是具有單調性的,(距離越大,分出來的組越少),那么我們二分這個距離,對于小于這個距離的,分到一組,否則不能分到一組。

對于二分出來的這個距離,分組結束后,統計分組個數,如果分組個數大于等于K個,增大這個二分值,否則減少這個二分值。

對于eps的判定,1e-6是可過的(1e-3有點大沒過去.....);

維護答案,輸出最終答案即可。

對于這個題的解法,看到網上大部分的最小生成樹的思路更加高效:

①對于一個部落來講,可以是一個點,當然也可以多個點。

②那么我們不妨貪心來做,首先按照邊從小到大排序,接下來對于權值較小的邊開始合并.直到合并到n-k條邊的時候.大集合作為一個部落,之外的那些點每個點作為一個部落的話,此時就有K個部落了,那么這個最近的距離就是接下來的那條邊,那么就第n-k+1條樹邊。

③這個思路也是蠻好的,記錄一下,將問題巧妙轉化,變成求第n-k+1條最小生成樹邊。

Ac代碼(窩寫的二分的):

#include<stdio.h>#include<string.h>#include<math.h>using namespace std;#define eps 1e-6double x[100200];double y[100200];double dis[1005][1005];int f[1005];int n,m;int find(int a){    int r=a;    while(f[r]!=r)    r=f[r];    int i=a;    int j;    while(i!=r)    {        j=f[i];        f[i]=r;        i=j;    }    return r;}int merge(int a,int b){    int A,B;    A=find(a);    B=find(b);    if(A!=B)    {        f[B]=A;    }}int Slove(double mid){    for(int i=1;i<=n;i++)f[i]=i;    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            if(dis[i][j]<mid)            {                merge(i,j);            }        }    }    int cnt=0;    for(int i=1;i<=n;i++)    {        if(f[i]==i)cnt++;    }    if(cnt<m)return 1;    else return 0;}int main(){    while(~scanf("%d%d",&n,&m))    {        for(int i=1;i<=n;i++)        {            scanf("%lf%lf",&x[i],&y[i]);        }        for(int i=1;i<=n;i++)        {            for(int j=1;j<=n;j++)            {                dis[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));            }        }        double ans=-1;        double l=0;        double r=1000000000000;        while(r-l>eps)        {            double mid=(l+r)/2;            if(Slove(mid)==1)            {                ans=mid;                r=mid;            }            else l=mid;        }        PRintf("%.2lf/n",ans);    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久草成人在线观看 | 久草最新在线 | 亚洲欧美在线视频免费 | 黄色av网| av中文字幕免费在线观看 | 国产电影精品久久 | 久久午夜神器 | 久久91久久久久麻豆精品 | 午夜视频色 | 天天夜夜操操 | 国产成人在线一区二区 | 91精品国产网站 | 88xx成人永久免费观看 | 香蕉久草视频 | 成人wxx视频免费 | 国产精品久久久乱弄 | 加勒比色综合 | 嫩嫩的freehdxxx| 成人午夜免费网站 | 免费一级毛片免费播放 | 欧美成人一区二区三区电影 | 国产一区二区免费在线观看 | 精品一区二区亚洲 | 色妞欧美| 一级片久久免费 | 福利在线免费视频 | 91九色蝌蚪国产 | 国产99一区二区 | 视频一区二区视频 | 毛片电影在线看 | 色999久久久精品人人澡69 | 久久精品av | 欧美久久久一区二区三区 | 久久精品国产99国产精品亚洲 | a视频在线免费观看 | 天天草天天干天天射 | 成人在线免费看 | 日本黄色大片免费 | 久久99深爱久久99精品 | 国产手机国产手机在线 | 黄色影院在线看 |