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

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

            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 研究下

            帶權(quán)的話,怎么修改?  回復(fù)  更多評論   

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

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


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


            中文字幕精品无码久久久久久3D日动漫 | 国产亚洲欧美成人久久片 | 欧美大香线蕉线伊人久久| 精品无码人妻久久久久久| 超级碰久久免费公开视频| 亚洲国产精品久久久久久| 久久er国产精品免费观看2| 粉嫩小泬无遮挡久久久久久| 精品久久久久久无码中文字幕一区| 久久精品青青草原伊人| 亚洲人成网亚洲欧洲无码久久| 亚洲国产日韩欧美久久| 久久久国产精华液| 久久夜色精品国产网站| 久久精品国产清高在天天线| 国产精品久久久久久福利漫画| 国产精品久久久久影视不卡| 色综合久久88色综合天天| 精品久久综合1区2区3区激情| 久久本道久久综合伊人| 亚洲欧美一级久久精品| 无码人妻精品一区二区三区久久| 久久人妻少妇嫩草AV无码专区| 国产一级做a爰片久久毛片| 久久久WWW成人免费精品| 国色天香久久久久久久小说| 97精品久久天干天天天按摩| 欧美一区二区精品久久| 性做久久久久久久久浪潮| 亚洲第一极品精品无码久久| 夜夜亚洲天天久久| 国产精品久久久久蜜芽| 久久九九青青国产精品| 久久久WWW免费人成精品| 久久亚洲精品无码AV红樱桃| 国产精品美女久久久免费| 伊人久久精品无码av一区| 天天久久狠狠色综合| 精品综合久久久久久98| 久久精品国产亚洲Aⅴ香蕉| 欧洲人妻丰满av无码久久不卡|