• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-38  評論-23  文章-0  trackbacks-0

            剛拿到題目,就想到將集合看成一個獨立點,求次MST。再對每個集合內的所有點求MST..

            可惜比賽的時候沒過這題。。錯誤原來在 空的集合 是不需要連接(這個沒考慮所以出錯了)
            我用了prim算法 沒什么優化..903ms過的.(可以用堆優化下)
            #include<iostream>
            #include
            <cmath>
            using namespace std;
            const double inf= 1000000000;
            double math[105][105],matx[105][105];
            struct point
            {
                
            double x,y,z;
            }
            ;
            point hy[
            105][105];
            int num[105],coll[105];
            bool eq(point e,point d)
            {
                
            if(abs(e.x-d.x)<1e-6&&abs(e.y-d.y)<1e-6&&abs(e.z-d.z)<1e-6)
                    
            return true;
                
            return false;
            }

            double prim(double mat[][105],int n)
            {
                
            double dist[105];
                
            bool visit[105];
                
            for(int i=0;i<n;i++)
                    dist[i]
            =inf;
                memset(visit,
            false,sizeof(visit));
                dist[
            0]=0;
                
            double sum=0;
                
            for(int i=0;i<n;i++)
                
            {
                    
            int minpos=-1;double minv=inf;
                    
            for(int j=0;j<n;j++)
                    
            {
                        
            if(!visit[j]&&(minpos==-1||dist[j]<minv))
                        
            {
                            minpos
            =j;
                            minv
            =dist[j];
                        }

                    }

                    visit[minpos]
            =true;
                    sum
            +=dist[minpos];
                    
            for(int j=0;j<n;j++)
                    
            {
                        
            if(!visit[j]&&dist[j]>mat[minpos][j])
                            dist[j]
            =mat[minpos][j];
                    }

                }

                
            return sum;
            }

            int main()
            {
                
            int n,m;
                
            while(cin>>n)
                
            {
                    cin
            >>m;
                    memset(num,
            0,sizeof(num));
                    
            for(int i=0;i<m;i++)
                    
            {
                        point d;
                        
            int id,j;
                        cin
            >>d.x>>d.y>>d.z>>id;
                        
            for(j=0;j<num[id-1];j++)
                        
            {
                            
            if(eq(hy[id-1][j],d)) break;
                        }

                        
            if(j==num[id-1])
                        
            {
                            hy[id
            -1][num[id-1]]=d;
                            num[id
            -1]++;
                        }

                    }

                    memset(math,
            0,sizeof(math));
                    
            int len=0;
                    
            for(int i=0;i<n;i++)
                        
            if(num[i]!=0)
                            coll[len
            ++]=i;
                    
            for(int i=0;i<len;i++)
                        
            for(int j=0;j<len;j++)
                            
            {
                                
            if(i==j)
                                
            {
                                    math[i][j]
            =0;
                                    
            continue;
                                }

                                math[i][j]
            =abs((double)(num[coll[i]]-num[coll[j]]))*abs((double)(coll[i]-coll[j]));
                            }

                    
            double sum=0;
                    sum
            +=prim(math,len);
                    
            for(int i=0;i<n;i++)
                    
            {
                        point it,it2;
                        
            int l1,l2;
                        memset(matx,
            0,sizeof(matx));
                        
            for(l1=0;l1<num[i];l1++)
                        
            {
                            
            for(l2=0;l2<num[i];l2++)
                            
            {
                                
            if(l1==l2)
                                
            {
                                    matx[l1][l2]
            =0;
                                    
            continue;
                                }

                                it
            =hy[i][l1];
                                it2
            =hy[i][l2];
                                
            double l=(it.x-it2.x)*(it.x-it2.x)+(it.y-it2.y)*(it.y-it2.y)+(it.z-it2.z)*(it.z-it2.z);
                                matx[l1][l2]
            =sqrt(l);
                            }

                        }

                        
            double v=prim(matx,num[i]);
                        sum
            +=v;
                    }

                    printf(
            "%.4lf\n",sum);
                }

                
            return 0;
            }

            posted on 2009-05-02 20:37 米游 閱讀(379) 評論(0)  編輯 收藏 引用 所屬分類: ACM
            久久亚洲精品视频| 久久久久这里只有精品 | 99久久综合国产精品免费| 亚洲а∨天堂久久精品| 欧美久久精品一级c片片| 亚洲AV无码久久精品色欲| 亚洲精品99久久久久中文字幕| 国内精品久久久久久久久电影网| 亚洲国产精品一区二区三区久久| 久久综合精品国产一区二区三区| 国内精品九九久久久精品| 欧美喷潮久久久XXXXx| 亚洲精品tv久久久久久久久| 国产91色综合久久免费| 国内精品久久久久影院薰衣草| 亚洲精品NV久久久久久久久久| 国产日韩久久免费影院| 久久亚洲精品视频| 久久综合久久久| 热久久视久久精品18| 国内精品伊人久久久久影院对白| 国产69精品久久久久观看软件 | 中文字幕无码免费久久| 久久电影网2021| 久久久久亚洲AV片无码下载蜜桃| 狠狠色丁香久久综合婷婷| 久久人爽人人爽人人片AV| 狠狠精品久久久无码中文字幕| 九九99精品久久久久久| 漂亮人妻被中出中文字幕久久| 91精品国产高清久久久久久国产嫩草| 久久婷婷人人澡人人| 国产成人久久精品麻豆一区| 色婷婷综合久久久久中文| 久久人爽人人爽人人片AV| 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | AAA级久久久精品无码区| 97久久精品人人做人人爽| 久久精品国产久精国产| 天天综合久久一二三区| 久久91精品国产91久久小草|