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

            The Fourth Dimension Space

            枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

            whu 帶花樹算法 template ,研究下..

            struct Graph {
                
            int n, match[maxn];
                
            bool adj[maxn][maxn];
                
            void clear() {
                    memset(adj, 
            0sizeof(adj));
                    n 
            = 0;
                }

                
            void insert(const int &u, const int &v) {
                    get_max(n, max(u, v) 
            + 1);
                    adj[u][v] 
            = adj[v][u] = 1;
                }

                
            int max_match() {
                    memset(match, 
            -1sizeof(match));
                    
            int ans = 0;
                    
            for (int i = 0; i < n; ++i) {
                        
            if (match[i] == -1{
                            ans 
            += bfs(i);
                        }

                    }

                    
            return ans;
                }

                
            int Q[maxn], pre[maxn], base[maxn];
                
            bool hash[maxn];
                
            bool in_blossom[maxn];
                
            int bfs(int p) {
                    memset(pre, 
            -1sizeof(pre));
                    memset(hash, 
            0sizeof(hash));
                    
            for (int i = 0; i < n; ++i) {
                        
            base[i] = i;
                    }

                    Q[
            0= p;
                    hash[p] 
            = 1;
                    
            for (int s = 0, t = 1; s < t; ++s) {
                        
            int u = Q[s];
                        
            for (int v = 0; v < n; ++v) {
                            
            if (adj[u][v] && base[u] != base[v] && v != match[u]) {
                                
            if (v == p || (match[v] != -1 && pre[match[v]] != -1)) {
                                    
            int b = contract(u, v);
                                    
            for (int i = 0; i < n; ++i) {
                                        
            if (in_blossom[base[i]]) {
                                            
            base[i] = b;
                                            
            if (hash[i] == 0{
                                                hash[i] 
            = 1;
                                                Q[t
            ++= i;
                                            }

                                        }

                                    }

                                }
             else if (pre[v] == -1{
                                    pre[v] 
            = u;
                                    
            if (match[v] == -1{
                                        argument(v);
                                        
            return 1;
                                    }
             else {
                                        Q[t
            ++= match[v];
                                        hash[match[v]] 
            = 1;
                                    }

                                }

                            }

                        }

                    }

                    
            return 0;
                }

                
            void argument(int u) {
                    
            while (u != -1{
                        
            int v = pre[u];
                        
            int k = match[v];
                        match[u] 
            = v;
                        match[v] 
            = u;
                        u 
            = k;
                    }

                }

                
            void change_blossom(int b, int u) {
                    
            while (base[u] != b) {
                        
            int v = match[u];
                        in_blossom[
            base[v]] = in_blossom[base[u]] = true;
                        u 
            = pre[v];
                        
            if (base[u] != b) {
                            pre[u] 
            = v;
                        }

                    }

                }

                
            int contract(int u, int v) {
                    memset(in_blossom, 
            0sizeof(in_blossom));
                    
            int b = find_base(base[u], base[v]);
                    change_blossom(b, u);
                    change_blossom(b, v);
                    
            if (base[u] != b) {
                        pre[u] 
            = v;
                    }

                    
            if (base[v] != b) {
                        pre[v] 
            = u;
                    }

                    
            return b;
                }

                
            int find_base(int u, int v) {
                    
            bool in_path[maxn] = {};
                    
            while (true{
                        in_path[u] 
            = true;
                        
            if (match[u] == -1{
                            
            break;
                        }

                        u 
            = base[pre[match[u]]];
                    }

                    
            while (!in_path[v]) {
                        v 
            = base[pre[match[v]]];
                    }

                    
            return v;
                }

            }
            ;

            posted on 2010-04-24 16:43 abilitytao 閱讀(867) 評論(2)  編輯 收藏 引用

            評論

            # re: whu 帶花樹算法 template ,研究下.. 2010-12-16 20:41 研究下

            帶權的話,怎么修改?  回復  更多評論   

            # re: whu 帶花樹算法 template ,研究下.. 2011-02-23 12:07 tw

            你好,請問base數組干什么用的嗎?  回復  更多評論   

            99久久久久| 久久亚洲色一区二区三区| 久久久精品国产sm调教网站 | 97久久天天综合色天天综合色hd| 亚洲AV成人无码久久精品老人| 国产精品99久久精品| 99久久精品免费观看国产| 久久亚洲国产精品成人AV秋霞 | 99精品国产免费久久久久久下载| 国产69精品久久久久观看软件| 91精品国产91久久久久福利| 久久e热在这里只有国产中文精品99| 精品久久久久成人码免费动漫| A狠狠久久蜜臀婷色中文网| 亚洲成av人片不卡无码久久| 久久精品国产第一区二区三区| 色婷婷综合久久久久中文字幕 | 久久久久久精品久久久久| 国产精品久久国产精品99盘| 亚洲一级Av无码毛片久久精品| 亚洲国产成人久久精品影视| 亚洲va久久久噜噜噜久久狠狠| 狠狠人妻久久久久久综合| 丰满少妇人妻久久久久久| 亚洲国产成人久久综合野外| 国产99久久九九精品无码| 国产国产成人精品久久| 久久精品人人做人人爽电影蜜月| 尹人香蕉久久99天天拍| 久久综合伊人77777| 人人狠狠综合88综合久久| 久久久久亚洲AV无码专区桃色| 91精品无码久久久久久五月天| 97久久国产亚洲精品超碰热| 无遮挡粉嫩小泬久久久久久久| 亚洲精品国产美女久久久| 久久国产精品无| 色妞色综合久久夜夜| 日本欧美久久久久免费播放网| 伊人久久大香线蕉AV色婷婷色| 中文字幕乱码人妻无码久久|