<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【模板】并查集

        并查集是解決兩元素是否屬于同一集合,將一個集合合并另一集合的數(shù)據(jù)結(jié)構(gòu)。具體來說,我們使用數(shù)字代替集合,比如集合1,集合2.使用數(shù)組f[i]維護元素i屬于的集合,比如f[2] = 4表示元素2屬于集合4。具體我們有以下實現(xiàn)功能的代碼

      1 初始化表示集合的數(shù)組。

          cin>>n>>m;
          for(int i=1; i<=n; i++)
              f[i]=i;

       

         表示元素i屬于集合i,也就是說開始每個元素都是散開的。

      2 實現(xiàn)查找功能的find()函數(shù)

      int find(int x)
      {
          if(f[x]!=x) return f[x]=find(f[x]);
          return x;
      };

      具體說明以下怎么實現(xiàn)的查找到的根結(jié)點(圖有點丑)

       

       以結(jié)點d為例,假設(shè)我們查找結(jié)點d屬于那個集合也就是查找到這顆樹的根結(jié)點。

      從系統(tǒng)棧層面解釋。

       

       可以看到到達結(jié)點a之后,返回棧開始返回。

       結(jié)點a從上到下賦值給路徑上的所有結(jié)點。那么這棵樹就變成這樣。

       這就是路徑壓縮。

      3 合并函數(shù)join()

      void join (int x,int y)
      {
          int fx=find(x),fy=find(y);
          if(fx!=fy)     f[fx]=fy;
      };

       

        假設(shè)合并元素x,y所在集合首先find(x),find(y)找到元素x,元素y屬于那個集合。

       然后將f[fx] 賦值為 fy,也就是x所在集合加入y所在集合。

       實現(xiàn)了合并。

       4 維護特征的并查集(帶權(quán)并查集)

        例題:837. 連通塊中點的數(shù)量 https://www.acwing.com/problem/content/839/

        只需要多增加一個數(shù)組siz[]來儲存集合i的大小即可。初始化siz[i] = 1;

      #include<bits/stdc++.h>
      #define int long long
      using namespace std;
      const int maxn = 1e5 + 10;
      int n,m;
      
      int f[maxn],size_f[maxn];
      
      int find(int x){
          if(f[x] != x) return f[x] = find(f[x]);
          else return f[x];
      }
      
      void join(int x,int y){
          int x1 = find(x),y1 = find(y);
          if(x1 != y1) {
              size_f[y1] += size_f[x1]; // 主要維護集合fy的大小。
              f[x1] = y1;
          }
      }
      signed main ()
      {
          cin>>n>>m;
          
          for(int i = 1; i<= n; i++){
              f[i] = i;
              size_f[i] = 1;
          }
          while(m--){
              string op;
              cin>>op;
              if(op == "C"){
                  int a,b;
                  cin>>a>>b;
                  join(a,b);
              }else if(op == "Q1"){
                  int a,b;
                  cin>>a>>b;
                  printf(find(a) == find(b) ? "Yes\n":"No\n");
              }else if(op == "Q2"){
                  int a;
                  cin>>a;
                  printf("%d\n",size_f[find(a)]);
              }
          }
          return 0;
      }

       

       

      posted @ 2024-01-25 13:05  意外路過的番茄醬騎士  閱讀(47)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩激情一区二区三区| 亚洲精品成人福利网站| 变态另类视频一区二区三区| 色综合人人超人人超级国碰| 国产日韩精品欧美一区灰| 四虎库影成人在线播放| 亚洲综合国产伊人五月婷| japanese人妻中文字幕| 永久免费无码av在线网站| 亚洲综合一区二区三区不卡| 亚洲AV无码专区亚洲AV桃| caoporn成人免费公开| 久久精品青青大伊人av| 成人国产永久福利看片| 国产综合色在线精品| 无码a∨高潮抽搐流白浆| 国产精品自拍一二三四区| 临猗县| 日韩欧激情一区二区三区| 精品免费看国产一区二区| 色综合中文综合网| 免费久久人人爽人人爽AV| 欧美人与动人物牲交免费观看 | 精品无人乱码一区二区三区的优势| 国产精品国产片在线观看| 国产亚洲日韩av在线播放不卡| 日韩高清砖码一二区在线| 67194熟妇在线观看线路| 精品偷拍一区二区三区| 亚洲精品国产精品不乱码| 国产亚洲av人片在线播放| 国产女人在线视频| 无码精品一区二区三区在线| 亚洲av区一区二区三区| 欧美性xxxxx极品| 久久婷婷丁香五月综合五| 国产精品一区二区在线蜜芽tv| 亚洲风情亚aⅴ在线发布| 国产av一区二区三区综合| 怡春院久久国语视频免费| 女女互揉吃奶揉到高潮视频|