• <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>
            JulyRina's blog
            welcome to July Rina's blog
            posts - 22,comments - 1,trackbacks - 0
            題目大意:動物王國中有三類動物A,B,C,這三類動物的食物鏈構成了有趣的環形。A吃B, B吃C,C吃A。 
            現有N個動物,以1-N編號。每個動物都是A,B,C中的一種,但是我們并不知道它到底是哪一種。 
            有人用兩種說法對這N個動物所構成的食物鏈關系進行描述: 
            第一種說法是"1 X Y",表示X和Y是同類。 
            第二種說法是"2 X Y",表示X吃Y。 
            此人對N個動物,用上述兩種說法,一句接一句地說出K句話,這K句話有的是真的,有的是假的。當一句話滿足下列三條之一時,這句話就是假話,否則就是真話。 
            1) 當前的話與前面的某些真的話沖突,就是假話; 
            2) 當前的話中X或Y比N大,就是假話; 
            3) 當前的話表示X吃X,就是假話。 
            你的任務是根據給定的N(1 <= N <= 50,000)和K句話(0 <= K <= 100,000),輸出假話的總數。 
            題目分析;由于N和K很大,所以必須高效的維護動物之間的關系,并快速判斷是否殘生了矛盾,所以決定采用并查集。
            對于每只動物i創建3個元素i,i+N,i+2N,并用這3*N個元素創建并查集。這個并查集維護如下信息:
            i+xN表示“i屬于種類x”。
            并查集里的每一個組表示組內所有元素代表的都同時發生或不發生。
            同時,在合并之前先判斷合并是否會產生矛盾。
            #include <cstdio>
            #include <iostream>
            using namespace std;

            const int maxn = 50050;

            int father[maxn*3], n, m, ans;

            void init() {
                for(int i=0;i<3*n;i++) father[i] = i;
            }
            int find(int x) {
                return x == father[x] ? x : father[x] = find(father[x]);
            }
            void unite(int x, int y) {
                int a = find(x) , b = find(y);
                father[a] = father[b] = father[x] = father[y] = min(a, b);
            }
            bool check(int d, int x, int y) {
                if(x >= n || y >= n || x < 0 || y < 0)
                    return false;
                if(d == 2 && x == y) 
                    return false;
                if(d == 1) {
                    if(find(x) == find(y+n) || find(x) == find(y+2*n))
                        return false;
                    unite(x, y);
                    unite(x+n, y+n);
                    unite(x+2*n, y+2*n);
                    return true;
                } else {
                    if(find(x) == find(y) || find(x) == find(y+2*n))
                        return false;
                    unite(x, y+n);
                    unite(x+n, y+2*n);
                    unite(x+2*n, y);
                    return true;
                }
            }
            int main() {
                scanf("%d%d" , &n, &m);
                init();
                ans = 0;
                for(int i=0;i<m;i++) {
                    int d, x, y;
                    scanf("%d%d%d", &d, &x, &y);
                    x --; y --;
                    if(check(d, x, y) == false)
                        ans ++;
                }
                printf("%d\n", ans);
                return 0;
            }
            posted on 2015-02-11 17:33 JulyRina 閱讀(310) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告
            久久久久国产精品麻豆AR影院 | 久久精品视频免费| 久久久亚洲欧洲日产国码aⅴ| 丁香色欲久久久久久综合网| 午夜精品久久久久久久久| 久久影视国产亚洲| 俺来也俺去啦久久综合网| 国产A三级久久精品| 99久久精品免费看国产免费| 久久精品免费一区二区| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 久久亚洲精精品中文字幕| 一级做a爰片久久毛片毛片| 久久精品国产亚洲网站| 欧美日韩精品久久免费| 国内精品久久久久久久亚洲| 久久国产精品成人影院| 开心久久婷婷综合中文字幕| 国产日产久久高清欧美一区| 伊人久久大香线蕉AV色婷婷色| 久久夜色tv网站| 亚洲国产成人久久精品影视| 无码国内精品久久人妻| 国产免费久久精品99re丫y| 久久综合精品国产一区二区三区| 精品久久久久久无码专区| 一本一道久久综合狠狠老 | 久久久久国产一级毛片高清版| 色天使久久综合网天天| 国产香蕉久久精品综合网| 久久久这里有精品中文字幕| 久久99精品久久久久久秒播| 国产一区二区三区久久| 99久久精品免费看国产| 久久精品亚洲男人的天堂| 久久亚洲AV无码西西人体| 久久综合日本熟妇| 东方aⅴ免费观看久久av| 无码人妻精品一区二区三区久久| 欧洲人妻丰满av无码久久不卡 | 久久精品国产只有精品2020|