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 }。