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

            評論

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

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

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

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

            久久不见久久见免费影院www日本| 欧美久久亚洲精品| 午夜视频久久久久一区| 亚洲欧美日韩精品久久| 999久久久免费精品国产| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 久久久久亚洲av成人无码电影| 国产精品一久久香蕉国产线看| 午夜精品久久久久久中宇| 一本色道久久综合亚洲精品| 亚洲国产精品久久久天堂| 无码国内精品久久人妻蜜桃| 无码人妻精品一区二区三区久久久 | 狠狠色丁香婷婷久久综合| 久久天天躁夜夜躁狠狠躁2022| 久久无码AV一区二区三区| 久久99久国产麻精品66| 久久夜色精品国产噜噜麻豆| 久久精品免费观看| 久久久噜噜噜久久| 久久妇女高潮几次MBA| 精品永久久福利一区二区| 亚洲午夜久久影院| 18禁黄久久久AAA片| 国产美女久久精品香蕉69| 国产精品gz久久久| 亚洲香蕉网久久综合影视| 蜜桃麻豆www久久| 亚洲国产成人精品91久久久 | 婷婷伊人久久大香线蕉AV| 99精品国产在热久久无毒不卡| 大美女久久久久久j久久| 国内高清久久久久久| 国产精品免费久久| 久久国产亚洲高清观看| 色综合久久夜色精品国产| 成人久久精品一区二区三区| 精品久久久久久久国产潘金莲 | avtt天堂网久久精品| 亚洲午夜精品久久久久久app| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 |