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

            ArcTan

            dfs
            隨筆 - 16, 文章 - 117, 評(píng)論 - 6, 引用 - 0
            數(shù)據(jù)加載中……

            hdu 2419 (STL:set multiset)

            首先膜拜膜拜青島二中的 aKc大牛啊,我徹底給跪了!!!
            差距太大,好好努力吧!!!

            算法,數(shù)據(jù)結(jié)構(gòu),C++,STL。需要去學(xué)的啊,下午開(kāi)始學(xué)吧學(xué)吧

            圖的操作,使用集合來(lái)維護(hù),把操作序列倒過(guò)來(lái)看,割邊則看做兩個(gè)集合的合并。

            STL 的set和multiset 很強(qiáng)大啊,第一用STL寫(xiě)東西

            wangs ,你該努力了,大牛之路,遠(yuǎn)著呢。
            #include <cstdlib>
            #include 
            <cctype>
            #include 
            <cstring>
            #include 
            <cstdio>
            #include 
            <cmath>
            #include 
            <algorithm>
            #include 
            <vector>
            #include 
            <string>
            #include 
            <iostream>
            #include 
            <sstream>
            #include 
            <map>
            #include 
            <set>
            #include 
            <queue>
            #include 
            <stack>
            #include 
            <fstream>
            #include 
            <numeric>
            #include 
            <iomanip>
            #include 
            <bitset>
            #include 
            <list>
            #include 
            <stdexcept>
            #include 
            <functional>
            #include 
            <utility>
            #include 
            <ctime>
            #include 
            <cmath>
            #include 
            <climits>

            using namespace std;

            typedef pair
            <intint> PII;
            const int MAXN = 20010, MAXM = 60010, MAXQ = 300010;
            int value[MAXN], query[MAXQ][3];
            multiset
            <PII> e;
            multiset
            <int> v[MAXN];
            int pre[MAXN];

            int root(int a)
            {
                
            if(pre[a] != a)
                    pre[a] 
            = root(pre[a]);
                
            return pre[a];
            }

            int unionSet(int a, int b)
            {
                multiset
            <int>::iterator it;
                a 
            = root(a), b = root(b);
                
            if(a == b)
                    
            return 0;
                
            if(v[a].size() > v[b].size())
                    swap(a, b);
                
            for    (it = v[a].begin(); it != v[a].end(); it++)
                    v[b].insert(
            *it);
                v[a].clear();
                pre[a] 
            = b;
                
            return 0;
            }

            int update(int a, int x)
            {
                
            int ta = a;
                a 
            = root(a);
                v[a].erase(v[a].find(value[ta]));
                v[a].insert(x);
                value[ta] 
            = x;
                
            return 0;
            }

            int main()
            {
                
            int n, m, q;
                
            int a, b;
                
            int i,u;
                
            int cas=0;
                
            char ch[3];
                
            double ct = 0, sum = 0;
                multiset
            <PII>::iterator it;
                multiset
            <int>::iterator tp;
                
            while(scanf("%d%d%d",&n,&m,&q)==3)
                {
                    e.clear();
                    
            for (i = 1; i <= n; i++)
                        v[i].clear();

                    
            for (i = 1; i <= n; i++)
                    {
                        scanf(
            "%d"&value[i]);
                        pre[i] 
            = i;
                    }
                    
            for (i = 0; i < m; i++)
                    {
                        scanf(
            "%d%d"&a, &b);
                        
            if(a > b)
                            swap(a, b);
                        e.insert(PII(a, b));
                    }

                    
            for (i = 0; i < q; i++)
                    {
                        scanf(
            "%s"&ch);
                        scanf(
            "%d%d"&query[i][1], &query[i][2]);

                        query[i][
            0= ch[0];
                        
            if(ch[0== 'E')
                        {
                            
            if(query[i][1> query[i][2])
                                swap(query[i][
            1], query[i][2]);

                            it 
            = e.find(PII(query[i][1], query[i][2]));
                            e.erase(it);
                        }
                        
            else if(ch[0== 'U')
                            swap(value[query[i][
            1]], query[i][2]);
                    }

                    
            for (i = 1; i <= n; i++)
                        v[i].insert(value[i]);
                    
            for (it = e.begin(); it != e.end(); it++)
                        unionSet(it
            ->first, it->second);

               
            //     for (it = e.begin(); it != e.end(); it++)
                
            //        printf("%d %d\n",it->first, it->second);

                    ct
            =0;
                    sum
            =0;

                    
            for(int i = q - 1; i >= 0; i--)
                    {
                        
            if(query[i][0== 'E')
                            unionSet(query[i][
            1], query[i][2]);
                        
            else if(query[i][0== 'U')
                            update(query[i][
            1], query[i][2]);
                        
            else
                        {
                            ct 
            += 1;
                            u 
            = root(query[i][1]);
                            tp 
            = v[u].lower_bound(query[i][2]);
                            
            if(tp != v[u].end())
                                sum 
            += *tp;
                      
            //      printf("%d %d\n",u,*tp);
                        }
                    }
                    printf(
            "Case %d: %0.3lf\n",++cas,(double)sum/ct);
                }
                
            return 0;
            }

            posted on 2012-07-14 13:08 wangs 閱讀(267) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ACM-數(shù)據(jù)結(jié)構(gòu)

            一级做a爰片久久毛片看看| 久久亚洲精品人成综合网| 日韩亚洲欧美久久久www综合网| 婷婷综合久久狠狠色99h| 久久亚洲精品无码播放| 亚洲AV伊人久久青青草原| 狠狠色综合网站久久久久久久高清 | 99精品久久精品一区二区| 久久99毛片免费观看不卡| 亚洲国产婷婷香蕉久久久久久| 无码精品久久久天天影视| www亚洲欲色成人久久精品| 777午夜精品久久av蜜臀| 久久一区二区三区免费| 99久久精品日本一区二区免费| 思思久久精品在热线热| 久久青青草原综合伊人| 久久精品a亚洲国产v高清不卡| 三级片免费观看久久| 亚洲国产精久久久久久久| 久久亚洲精品中文字幕| 久久精品视频一| 久久久亚洲精品蜜桃臀 | 国产精品欧美久久久天天影视| 亚洲精品国精品久久99热| 久久久久久久国产免费看| 老司机国内精品久久久久| 久久亚洲春色中文字幕久久久 | 婷婷综合久久狠狠色99h| 国产V亚洲V天堂无码久久久| 色综合久久久久久久久五月| 久久99这里只有精品国产| 伊人色综合久久天天网| 久久影院午夜理论片无码| 狠狠精品干练久久久无码中文字幕 | 99久久成人国产精品免费| 亚洲综合伊人久久大杳蕉| 色诱久久久久综合网ywww| AV狠狠色丁香婷婷综合久久| 99久久精品费精品国产一区二区| 伊人久久大香线蕉影院95|