【并查集】noi2001食物链

P2024 [NOI2001]食物链

//这是一道比我年纪大的题啊啊啊啊啊QAQ

加权并查集  三倍并查集好厉害qwq

图源洛谷题解

贴代码qwq

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 int n, k, opt, x, y, ans = 0, f[150010];
 5 void init() { for(int i = 1; i <= n*3; i++) f[i] = i;}
 6 //开三倍并查集,一倍存自己的同类, 二倍存自己的猎物, 三倍存自己的天敌 
 7 int find(int x) {
 8     if(x != f[x]) f[x] = find(f[x]);
 9     return f[x];
10 } 
11 int merge(int u, int v) {
12     int r1 = find(u), r2 = find(v);
13     f[r1] = r2;
14 }
15 int main() {
16     scanf("%d%d",&n,&k);
17     init();
18     while(k--) {
19         scanf("%d%d%d",&opt,&x,&y);
20         if(x>n||y>n) ans++;
21         else if(opt == 1) {
22             if(find(x+n)==find(y)||find(x+2*n)==find(y)) ans++;
23             //如果x的猎物是y 或者 如果x的天敌是y 
24             else {
25                 merge(x, y), merge(x+n, y+n), merge(x+2*n, y+2*n);
26             }
27         }
28         else {
29             if(x == y) ans++;
30             else {
31                 if(find(x)==find(y)||find(x+2*n)==find(y)) {ans++; continue;}
32                 //如果x和y是同类 如果x的天敌是y  
33                   merge(x+n,y), merge(x,y+2*n), merge(x+2*n,y+n);
34                   //如果是真话, 则x的猎物是y, x和y的天敌是同类, x的天敌和y的猎物是同类  
35             }
36         }
37     }    
38     printf("%d",ans);
39     return 0;
40 }

加油加油ヾ(◍°∇°◍)ノ゙

 

posted @ 2018-10-12 14:16  _Hwjia  阅读(142)  评论(0编辑  收藏  举报
                       ::                              ::
                      :;J7, :,                        ::;7:
                      ,ivYi, ,                       ;LLLFS:
                      :iv7Yi                       :7ri;j5PL
                     ,:ivYLvr                    ,ivrrirrY2X,
                     :;r@Wwz.7r:                :ivu@kexianli.
                    :iL7::,:::iiirii:ii;::::,,irvF7rvvLujL7ur
                   ri::,:,::i:iiiiiii:i:irrv177JX7rYXqZEkvv17
                ;i:, , ::::iirrririi:i:::iiir2XXvii;L8OGJr71i
              :,, ,,:   ,::ir@mingyi.irii:i:::j1jri7ZBOS7ivv,
                 ,::,    ::rv77iiiriii:iii:i::,rvLq@huhao.Li
             ,,      ,, ,:ir7ir::,:::i;ir:::i:i::rSGGYri712:
           :::  ,v7r:: ::rrv77:, ,, ,:i7rrii:::::, ir7ri7Lri
          ,     2OBBOi,iiir;r::        ,irriiii::,, ,iv7Luur:
        ,,     i78MBBi,:,:::,:,  :7FSL: ,iriii:::i::,,:rLqXv::
        :      iuMMP: :,:::,:ii;2GY7OBB0viiii:i:iii:i:::iJqL;::
       ,     ::::i   ,,,,, ::LuBBu BBBBBErii:i:i:i:i:i:i:r77ii
      ,       :       , ,,:::rruBZ1MBBqi, :,,,:::,::::::iiriri:
     ,               ,,,,::::i:  @arqiao.       ,:,, ,:::ii;i7:
    :,       rjujLYLi   ,,:::::,:::::::::,,   ,:i,:,,,,,::i:iii
    ::      BBBBBBBBB0,    ,,::: , ,:::::: ,      ,,,, ,,:::::::
    i,  ,  ,8BHWJBBBBBi     ,,:,,     ,,, , ,   , , , :,::ii::i::
    :      iZMOMAQBBM2::::::::::,,,,     ,,,,,,:,,,::::i:irr:i:::,
    i   ,,:;u0MBMOG1L:::i::::::  ,,,::,   ,,, ::::::i:i:iirii:i:i:
    :    ,iuUuuXUkFu7i:iii:i:::, :,:,: ::::::::i:i:::::iirr7iiri::
    :     :rk@Yizero.i:::::, ,:ii:::::::i:::::i::,::::iirrriiiri::,
     :      5BMBBBBBBSr:,::rv2kuii:::iii::,:i:,, , ,,:,:i@petermu.,
          , :r50EZ8MBBBBGOBBBZP7::::i::,:::::,: :,:,::i;rrririiii::
              :jujYY7LS0ujJL7r::,::i::,::::::::::::::iirirrrrrrr:ii:
           ,:  :@kevensun.:,:,,,::::i:i:::::,,::::::iir;ii;7v77;ii;i,
           ,,,     ,,:,::::::i:iiiii:i::::,, ::::iiiir@xingjief.r;7:i,
        , , ,,,:,,::::::::iiiiiiiiii:,:,:::::::::iiir;ri7vL77rrirri::
         :,, , ::::::::i:::i:::i:i::,,,,,:,::i:i:::iir;@Secbone.ii:::