• <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 閱讀(866) 評論(2)  編輯 收藏 引用

            評論

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

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

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

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

            91久久九九无码成人网站| 国产成人精品综合久久久| 久久精品视频网| 国产精品九九九久久九九| 精品久久久久久国产三级| 久久精品国产亚洲AV影院| 少妇人妻88久久中文字幕| 久久久久国产一级毛片高清版| 色悠久久久久久久综合网| 久久人人爽人人爽人人片AV不| 久久久中文字幕| 精品久久久久成人码免费动漫 | 国产成人精品综合久久久| 要久久爱在线免费观看| 99久久精品免费看国产一区二区三区| 欧美激情精品久久久久久久九九九| 91精品国产色综合久久| 色播久久人人爽人人爽人人片aV | 久久综合88熟人妻| 欧美国产精品久久高清| 99久久精品免费看国产| 精品免费久久久久久久| 色综合久久久久| 日日躁夜夜躁狠狠久久AV| 人妻无码久久精品| 精品久久久久久无码免费| 久久福利青草精品资源站免费| 久久99热这里只有精品国产| 久久婷婷人人澡人人| 精品久久久久久无码国产| 777久久精品一区二区三区无码| 久久久老熟女一区二区三区| 久久久久久毛片免费播放| 久久久SS麻豆欧美国产日韩| 久久笫一福利免费导航| 国产精品久久久久久久久软件| 激情五月综合综合久久69| 青青草国产精品久久| 99久久成人18免费网站| 久久国产高清一区二区三区| 精品久久国产一区二区三区香蕉 |