• <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 閱讀(294) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告
            三上悠亚久久精品| 久久综合鬼色88久久精品综合自在自线噜噜 | 夜夜亚洲天天久久| 久久w5ww成w人免费| 伊人色综合久久天天| 久久久久亚洲精品天堂久久久久久| 久久精品亚洲欧美日韩久久| 亚洲AV无码成人网站久久精品大| 久久精品国产99国产精品澳门| 亚洲国产日韩欧美综合久久| 狠狠色婷婷久久一区二区三区| 色综合合久久天天给综看| 国产精品久久99| 囯产极品美女高潮无套久久久| 国产精品免费看久久久香蕉| 亚洲AV日韩AV天堂久久| 久久久这里有精品| 国产精品99久久久久久猫咪 | 青青草原1769久久免费播放| 伊人久久无码精品中文字幕| 亚洲精品高清国产一久久| 一本色道久久HEZYO无码| 久久一本综合| 久久国产高清字幕中文| 国内精品伊人久久久久777| 久久久久久国产精品无码下载 | 国产亚洲精品自在久久| 精品久久久久成人码免费动漫| 久久精品国产一区二区电影| 亚洲精品国产成人99久久| 久久婷婷久久一区二区三区| 久久99热只有频精品8| 无码久久精品国产亚洲Av影片| 久久久久亚洲AV成人网人人网站| 久久精品国产亚洲7777| 色综合久久久久综合99| 亚洲精品无码专区久久同性男| 久久成人国产精品一区二区| 久久久久国产视频电影| 久久亚洲色一区二区三区| 伊人久久大香线蕉综合网站|