• <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,這三類動物的食物鏈構成了有趣的環(huán)形。A吃B, B吃C,C吃A。 
            現(xiàn)有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創(chuàng)建3個元素i,i+N,i+2N,并用這3*N個元素創(chuàng)建并查集。這個并查集維護如下信息:
            i+xN表示“i屬于種類x”。
            并查集里的每一個組表示組內所有元素代表的都同時發(fā)生或不發(fā)生。
            同時,在合并之前先判斷合并是否會產生矛盾。
            #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 閱讀(287) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告
            国产成人久久精品一区二区三区| 久久无码精品一区二区三区| 亚洲精品无码久久久久去q| 亚洲国产精品成人久久| 精品免费tv久久久久久久| 久久久久一本毛久久久| 国产偷久久久精品专区| 久久久91精品国产一区二区三区 | 三级三级久久三级久久| AAA级久久久精品无码片| 日本福利片国产午夜久久| 色综合久久88色综合天天 | 亚洲第一极品精品无码久久| 曰曰摸天天摸人人看久久久| 亚洲精品乱码久久久久久久久久久久| 亚洲国产精品久久66| 久久婷婷五月综合97色| 一本久久a久久精品综合香蕉| 国产情侣久久久久aⅴ免费| 亚洲日韩欧美一区久久久久我| AAA级久久久精品无码片| 精品久久人人爽天天玩人人妻| 国产精品丝袜久久久久久不卡| 久久精品无码一区二区无码| 2021国产精品午夜久久| 精品乱码久久久久久夜夜嗨| 人妻久久久一区二区三区| 色老头网站久久网| 亚洲精品高清国产一久久| 国产亚洲色婷婷久久99精品| 亚洲香蕉网久久综合影视| 欧美激情精品久久久久久久九九九| 狠狠狠色丁香婷婷综合久久五月| 亚洲va久久久噜噜噜久久天堂| 久久久久久久久波多野高潮| 亚洲国产精品嫩草影院久久| 亚洲中文字幕伊人久久无码 | 国产精品对白刺激久久久| 亚洲国产另类久久久精品黑人 | 久久精品人人做人人妻人人玩| 人妻无码αv中文字幕久久|