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

            a tutorial on computer science

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              21 隨筆 :: 0 文章 :: 17 評(píng)論 :: 0 Trackbacks
            一種很簡(jiǎn)潔的寫法,那個(gè)用棧存的算法實(shí)在是比較難看。
            問(wèn)題大概是這樣子的:
            無(wú)向圖割點(diǎn):比較特殊,因?yàn)榭赡茏庸?jié)點(diǎn)從別的路返回到父親點(diǎn),如果父親點(diǎn)再?gòu)淖约悍祷氐礁叩母赣H點(diǎn)。。所以
            low[father] = 
            minst{
               dfn[father],
               low[child],
               dfn[others]
            };

            無(wú)向圖割邊:還可以用上面的公式,對(duì)于邊u->v,如果low[v] < dfn[u],我們可以認(rèn)為這是割邊

            無(wú)向圖邊雙聯(lián)通:
            low[father] =
            minst{
            dfn[father],
            low[others],除了返回父親的邊
            }
            至于為什么會(huì)這樣,畫個(gè)圖理解下就好

            有向圖強(qiáng)聯(lián)通:
            和無(wú)向圖邊雙聯(lián)通是一樣的,這是不對(duì)的!!還沒(méi)想到好的辦法,還得用tarjan算法搞。

            無(wú)向圖點(diǎn)雙聯(lián)通:
            用求割點(diǎn)的那個(gè)公式,dfs把點(diǎn)放到棧里面,當(dāng)dfn[u] == low[u]的時(shí)候出棧,棧里面的點(diǎn)在一個(gè)點(diǎn)雙聯(lián)通里,記得把當(dāng)前點(diǎn)留在棧里


            //無(wú)向圖邊雙連通+縮點(diǎn),已知圖是個(gè)聯(lián)通圖 

            #include <cstdio>
            #include <algorithm>
            #include <vector>
            #include <cstring>

            using namespace std;

            const int maxn = 5010;
            int nmap[maxn][maxn];

            vector<int> edg[maxn];

            int dfn[maxn],vis[maxn],low[maxn];

            int deg[maxn];

            int N,M;

            int t;

            void dfs(int p,int i)
            {
              vis[i] = 1;
              dfn[i] = low[i] = ++t;

              for(int j = 0;j<edg[i].size();j++)
              {
            int next = edg[i][j];
            if(next == p) continue;
                if(!vis[next])
                {
                   dfs(i,next);
                }
                low[i] = min(low[i],low[next]);
              } 
              vis[i] = 2; 
            }

            int main()
            {
              //freopen("in.txt","r",stdin);
              
            //freopen("out.txt","w",stdout);
              scanf("%d%d",&N,&M);
              int i,a,b;
              for(i=0;i<M;i++)
              {
                scanf("%d%d",&a,&b);
                if(nmap[a][b]) continue;
                edg[a].push_back(b);
                edg[b].push_back(a);
                nmap[a][b] = 1;
              }
              dfs(1,1);
              int leaf = 0; 
              for(i=1;i<=N;i++)
              {
                for(int j=0;j<edg[i].size();j++)
                {
                  if(low[i] != low[edg[i][j]])
                    deg[low[i]]++;
                }
              }
              for(i=1;i<=t;i++)
              {
               if(deg[i] == 1) leaf++;
              }
              printf("%d\n",(leaf+1)/2);
              return 0;
            }

                  
            posted on 2012-10-24 22:47 bigrabbit 閱讀(521) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久精品国产亚洲综合色 | 久久se精品一区二区影院| 久久国产精品久久| 久久国产视屏| 少妇人妻88久久中文字幕| 久久久久综合网久久| 午夜精品久久久久久影视777| 久久只这里是精品66| 国产99久久精品一区二区| 一本色道久久88综合日韩精品 | 亚州日韩精品专区久久久| 伊人久久综合无码成人网| 品成人欧美大片久久国产欧美| 久久无码中文字幕东京热| 国内精品久久久久影院网站| 久久无码国产专区精品| 久久久久亚洲精品无码网址 | 99热热久久这里只有精品68| 香蕉99久久国产综合精品宅男自| 久久亚洲精品成人AV| 一本久久综合亚洲鲁鲁五月天| 久久精品成人免费看| 青青草原精品99久久精品66| 伊人久久大香线蕉精品不卡| 久久被窝电影亚洲爽爽爽| 日韩精品久久久久久免费| 久久综合鬼色88久久精品综合自在自线噜噜| 97久久久精品综合88久久| 天天爽天天狠久久久综合麻豆| 欧美国产成人久久精品| 久久这里有精品| 日韩久久久久中文字幕人妻 | 久久久久婷婷| 久久精品成人免费国产片小草| 精品综合久久久久久97超人| 精品久久久久久成人AV| 久久亚洲国产成人精品性色| 久久香蕉国产线看观看精品yw| 日韩精品久久久久久久电影蜜臀| 久久免费看黄a级毛片| 国产精品久久久久久久人人看|