• <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 閱讀(252) 評論(0)  編輯 收藏 引用 所屬分類: graphdata struct

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            亚洲一本综合久久| 久久久久亚洲精品日久生情| 国产精品久久久久久久久免费| 久久久噜噜噜久久熟女AA片| 国产叼嘿久久精品久久| 国内精品伊人久久久影院| 成人久久久观看免费毛片| 亚洲第一永久AV网站久久精品男人的天堂AV| 精品人妻伦九区久久AAA片69| 久久精品人成免费| 欧美激情精品久久久久久久| 久久A级毛片免费观看| 色偷偷91久久综合噜噜噜噜| 久久国产精品国产自线拍免费| 国内精品久久久久影院老司| 亚洲狠狠久久综合一区77777 | 久久96国产精品久久久| 欧美日韩精品久久久久| 四虎国产永久免费久久| 久久无码人妻一区二区三区| 欧美成a人片免费看久久| 日本三级久久网| 国产亚洲精品自在久久| 久久人人爽人人人人爽AV | 国产精品久久午夜夜伦鲁鲁| 久久人妻无码中文字幕| 亚洲国产成人乱码精品女人久久久不卡| 免费国产99久久久香蕉| 国产精品久久久久影院色| 99久久99久久精品免费看蜜桃 | 精品国产乱码久久久久久1区2区 | 久久综合给久久狠狠97色| 亚洲日本va中文字幕久久| 久久久久久久波多野结衣高潮| 亚洲精品97久久中文字幕无码| 久久久噜噜噜久久| 亚洲国产成人久久综合一区77| 亚洲精品无码专区久久同性男| 综合久久一区二区三区 | 久久亚洲精品成人AV| 久久国产精品成人影院|