スワップでLeetcode-5199最小の文字列(スイッチング素子列)

1つ の#define _for(iは、B)(I =(A)がINT;方には<Bと、I ++)は
 2  の#define _rep(iは、b)のための式(I =(A)がINT、I> B、I - )
 3  の#define 0x3f3f3f3f INF
 4  の#define MOD十億七
 5  の#define PB一back
 6  の#define MAXN 100003
 7  
8  int型のパー[MAXN]。// 父亲
9  INT高い[MAXN]。// 树的高度
10  
11  ボイドのinit(int型N)
 12  {
 13      _for(I、0 、N)
 14      {
15          パー[I] = I。
16          高[I] = 0 ;
17      }
 18  }
 19  
20  int型の検索(INT X)
 21  {
 22      リターン・パー[X] == X?X:PAR [X] = (PARは、[X])を見つけます。
23  }
 24  
25  ボイド(団結int型のx、int型のy)の
 26  {
 27      、X = 見つける(X)
28      、Y = (y)を見つけます。
29      であれば(x == y)のリターン;
30  
31     もし(高[X] < ハイ[Y])
 32          PARが[X] = Y。
33      他の
34      {
 35          パー[Y] =のX。
36          であれば(高い[X] == 高い[Y])
 37              ++ [x]は高いです38      }
 39  }
 40  
41  BOOL同じ(int型のx、int型のY)
 42  {
 43      リターン検索(X)== (y)を見つけます。
44  }
 45  
46  クラスのソリューション
 47  {
 48     ベクター< INT > [MAXN]。
49      公衆50          文字列 smallestStringWithSwaps(ストリング S、ベクトル<ベクトル< INT >>&対)
 51          {
 52              INT N = s.size()。
53              ストリング RNT =のS。
54              INIT(N)
55              _for(I、0 、pairs.size())
 56                  ユナイト(対[I] [ 0 ]対[I] [ 1 ])。
57              
58              _for(I、0 、s.size())
59                  [検索(I)] PB(I)。
60              
61              _for(I、0 、N)
 62              {
 63                  TMP。
64                  _for(j、0 、[I] .size())
 65                      tmpが+ = S [I] [J]。
66                  ソート(tmp.begin()、tmp.end())。
67                  _for(j、0 、[I] .size())
 68                      RNT [I] [J] = TMP [J]。
69              }
 70              リターンRNT。
71          }
 72 }。

 

おすすめ

転載: www.cnblogs.com/Asurudo/p/11566949.html