POJ2349+Prim

來源:互聯網
上載者:User

Prim!

/*prim題意:給定一些點,一些衛星,一個衛星能串連兩個點,點和點之間通訊有一定的距離限制。問能使得所有的點聯通的最小距離。*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#include<iostream>#include<queue>#include<map>#include<stack>#include<set>#include<math.h>using namespace std;typedef long long int64;//typedef __int64 int64;typedef pair<int64,int64> PII;#define MP(a,b) make_pair((a),(b)) const int maxn = 505;const int inf = 0x7fffffff;const double pi=acos(-1.0);const double eps = 1e-8;struct Node{double x,y;}a[ maxn ];int vis[ maxn ];double dis[ maxn ];double mat[ maxn ][ maxn ];double dist( Node a,Node b ){return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y) );}void init( int n ){for( int i=1;i<=n;i++ ){for( int j=1;j<=n;j++ ){mat[i][j] = dist( a[i],a[j] );}}return ;} void prim( int n ){for( int i=1;i<=n;i++ ){vis[ i ] = 0;dis[ i ] = mat[1][i];}vis[ 1 ] = 1;for( int i=1;i<=n;i++ ){int M = inf;int id = -1;for( int j=1;j<=n;j++ ){if( vis[ j ]==0&&M>dis[j] ){M = dis[ j ];id = j;}}if( id==-1 ) return ;vis[ id ] = 1;for( int j=1;j<=n;j++ ){if( vis[j]==0&&dis[j]>mat[ id ][ j ] ){dis[ j ] = mat[ id ][ j ];}}}return ;}int main(){int T;scanf("%d",&T);while( T-- ){int s,n;scanf("%d%d",&s,&n);for( int i=1;i<=n;i++ )scanf("%lf%lf",&a[i].x,&a[i].y);init( n );prim( n );sort( dis+1,dis+1+n );//for( int i=1;i<=n;i++ )//printf("%lf ",dis[ i ]);//puts("");printf("%.2lf\n",dis[ n-s+1 ]);}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.