• <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>

            bon

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              46 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(2)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            pku2728
            最簡單的最優(yōu)比例生成樹。黑書上有類似的題目,只是推出的0-1分數(shù)規(guī)劃的式子不同,思想一樣:
            MST + bisearch
            目前問題是不知如何估計二分搜索的上下界,看discuss上都是卡上下界過的。
             1 #include <iostream>
             2 #include <math.h>
             3 #define max(a,b) (a>b?a:b)
             4 #define min(a,b) (a<b?a:b)
             5 #define inf 1.5*100000000
             6 
             7 using namespace std;
             8 
             9 const int maxn=1001;
            10 //int place[]
            11 double G[maxn][maxn];
            12 double dis[maxn][maxn];
            13 double h[maxn];
            14 int n;
            15 
            16 double prim()
            17 {
            18      int i,j,k;
            19      bool s[maxn];
            20      double close[maxn];
            21      memset(s,false,sizeof(s));
            22      for(i=0;i<n;i++) close[i]=inf;
            23      s[0]=1;
            24      for(i=1;i<n;i++) close[i]=G[0][i];
            25      double total=0;
            26      for(i=1;i<n;i++){
            27          int idx;
            28          double mn=inf;
            29          for(j=1;j<n;j++if(!s[j] && close[j]<mn){
            30              idx=j;
            31              mn=close[j];
            32          }
            33          s[idx]=1;
            34          total+=close[idx];
            35          for(j=1;j<n;j++if(!s[j] && close[j]>G[idx][j]) close[j]=G[idx][j];
            36      }
            37      return total;
            38 }
            39 // 給定當前比例r,建新圖 
            40 void buildG(double r)
            41 {
            42      int i,j,k;
            43      for(i=0;i<n;i++for(j=0;j<n;j++) G[i][j]=0;
            44      //printf("G with r=%.3lf\n",r);
            45      for(i=0;i<n;i++){
            46          for(j=i+1;j<n;j++){
            47              G[i][j]=G[j][i]=fabs(h[i]-h[j])-r*dis[i][j];
            48              //printf("%.2lf ",G[i][j]);
            49          }
            50          //printf("\n");
            51      }
            52 //   printf("\n");
            53 }
            54 
            55 void read()
            56 {
            57      int i,j;
            58      double x[maxn],y[maxn];
            59      //scanf("%d",&n);
            60      for(i=0;i<n;i++){
            61         scanf("%lf%lf%lf",&x[i],&y[i],&h[i]);
            62      }
            63      for(i=0;i<n;i++) dis[i][i]=0;
            64      for(i=0;i<n;i++for(j=i+1;j<n;j++){
            65          dis[i][j]=dis[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
            66          //printf("%d %d %.2lf\n",i,j,dis[i][j]);
            67      }
            68 }
            69 
            70 void solve()
            71 {
            72      // discuss 里的上下界 
            73      double l=0,h=31,mid=(h+l)/2;
            74      buildG(mid);
            75      //printf("%.3lf\n",prim());
            76      
            77      // 二分搜索r_star使得用r_star建立的圖的最小生成樹權(quán)為0 
            78      
            79      while(true){
            80          double res=prim();
            81          if(fabs(res)<1e-5break;
            82          if(res<0) h=mid;
            83          else l=mid;
            84          mid=(h+l)/2
            85          buildG(mid);
            86      }
            87      
            88      printf("%.3lf\n",mid);
            89 }
            90 
            91 int main()
            92 {
            93     while(scanf("%d",&n) && n!=0){
            94         read();
            95         solve();
            96     }
            97 }
            98 
            posted on 2008-03-25 16:34 bon 閱讀(374) 評論(1)  編輯 收藏 引用

            Feedback

            # re: PKU2728 2008-07-10 21:57 see_yee
            thx  回復(fù)  更多評論
              

            Google PageRank 
Checker - Page Rank Calculator
            久久精品极品盛宴观看| 无码国内精品久久综合88| 色综合久久综合中文综合网| 久久久无码精品亚洲日韩按摩| 国产成人精品综合久久久久| 久久久无码精品亚洲日韩蜜臀浪潮| 久久久久亚洲Av无码专| 岛国搬运www久久| 久久国产V一级毛多内射| 国内精品久久久久久久久| 国产精品一区二区久久精品| 亚洲AV无码久久| 四虎国产精品成人免费久久| 中文字幕无码久久精品青草 | 精品久久一区二区三区| 人妻少妇久久中文字幕| 欧美日韩精品久久免费| 欧美亚洲国产精品久久| 88久久精品无码一区二区毛片 | 久久久精品人妻一区二区三区蜜桃 | 久久综合五月丁香久久激情| 91麻精品国产91久久久久 | 国产精品久久久久久久午夜片| 欧美日韩中文字幕久久伊人| 91精品国产91久久| 狠狠色综合网站久久久久久久| 久久久久亚洲爆乳少妇无| 一本一本久久a久久精品综合麻豆| 无码八A片人妻少妇久久| 亚洲欧美日韩中文久久| 成人综合伊人五月婷久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 99久久国产综合精品成人影院| 亚洲成色999久久网站| 久久九九久精品国产| 久久天天躁狠狠躁夜夜不卡| 久久久久99精品成人片欧美 | 亚洲国产成人久久笫一页 | 青草影院天堂男人久久| 日韩电影久久久被窝网| 国内精品伊人久久久久av一坑|