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

            pku1944 Fiber Communications 圖論好題!總體上的觀察,算法不難

            題意:
            n個節點組成一個環,相鄰節點間可以連邊,有m對點間需要通訊,問最少要構造多少通訊線路

            解答:
            首先,要明確一點,a,b之間要通訊,只能有兩種通訊線路[1,a),[a,n),還有一個重要條件就是最多只需要構建n-1條邊能將所有點聯通。這樣就只要枚舉斷電點,所有對通訊節點中的連接方式就都確定了,因為連接路徑是互補的。斷開一個點,一條路徑就被砍斷了,只能選擇另外一條。然后統計覆蓋的點的時候建議使用樹狀數組,樹狀數組表示這種左開右閉的區間是很給力的。左端點+1,右端點-1,復雜度n2logn。

            代碼 
             1 # include <cstdio>
             2 # include <utility>
             3 # include <functional>
             4 # include <iostream>
             5 # include <algorithm>
             6 # include <cstring>
             7 # define lowbit(a) (a&-a)
             8 using namespace std;
             9 int arr[1005],n,m;
            10 pair<int,int>data[10005];
            11 void add(int p,int num)
            12 {
            13    while(p<=n) 
            14       arr[p]+=num,p+=lowbit(p);
            15 }
            16 int sum(int p)
            17 {
            18     int res=0;
            19     while(p>0
            20       res+=arr[p],p-=lowbit(p);
            21     return res;
            22 }
            23 int main()
            24 {
            25     scanf("%d%d",&n,&m);
            26     for(int i=0;i<m;i++)
            27     {
            28       scanf("%d%d",&data[i].first,&data[i].second);
            29       if(data[i].first>data[i].second)
            30         swap(data[i].first,data[i].second);
            31     }
            32     int ans=0xfffffff;
            33     for(int i=1;i<=n;i++)
            34     {
            35         memset(arr,0,sizeof(arr));
            36         for(int j=0;j<m;j++)
            37             if(data[j].first<=i&&data[j].second>i)
            38                 add(1,1),add(data[j].first,-1),add(data[j].second,1);
            39             else
            40                 add(data[j].first,1),add(data[j].second,-1);
            41         int res=0;
            42         for(int j=1;j<=n;j++)
            43            if(sum(j)>0)
            44                res++;
            45         if(res<ans) ans=res;
            46     }
            47     printf("%d\n",ans);
            48     return 0;
            49 }

            posted on 2011-02-05 01:20 yzhw 閱讀(242) 評論(0)  編輯 收藏 引用 所屬分類: graphdata struct

            <2010年11月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久精品二区| 国产高清美女一级a毛片久久w | .精品久久久麻豆国产精品| 久久发布国产伦子伦精品| 99久久精品国产高清一区二区| 91视频国产91久久久| 国内精品久久久久久不卡影院| 精品国产青草久久久久福利| 久久精品亚洲AV久久久无码| 久久天天躁夜夜躁狠狠| 国产精品久久久亚洲| 国产成人综合久久精品红| 久久不见久久见免费视频7| 国产精品熟女福利久久AV| 亚洲AV无码久久精品狠狠爱浪潮 | 精品久久久久国产免费 | 久久久久久国产精品美女| 久久不射电影网| 97久久国产露脸精品国产| 精品国产婷婷久久久| 99久久人妻无码精品系列蜜桃| 伊人久久精品影院| 久久国产精品国语对白| 久久久久四虎国产精品| 国产精品久久久久国产A级| 伊人久久久AV老熟妇色| 欧美激情精品久久久久久| 久久99久久无码毛片一区二区| 俺来也俺去啦久久综合网| 亚洲成色www久久网站夜月| 婷婷久久综合| 欧美粉嫩小泬久久久久久久| 国产精品免费久久久久久久久| 久久人人爽人人爽人人片av高请 | 久久青青草原国产精品免费| 亚洲午夜久久久久久久久久| 精品久久久中文字幕人妻 | 久久亚洲2019中文字幕| 久久精品成人| 亚洲欧美国产日韩综合久久 | 久久99精品国产麻豆婷婷|