Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Disjoint Set    郭至軒(KuoE0)   KuoE0.tw@gmail.com        KuoE0.ch
Attribution-ShareAlike 3.0 Unported           (CC BY-SA 3.0)  http://creativecommons.org/licenses/by-sa/3.0/             L...
Disjoint Set            中國譯:並查集    1          4                       75                          8    2               3  ...
Disjoint Set            中國譯:並查集    1          4                       75                          8    2               3  ...
Disjoint Set            中國譯:並查集    1          4                       75                          8    2               3  ...
Disjoint Set            中國譯:並查集    1          4                       75                          8    2               3  ...
Tree Structure    1          4                     75                        8    2               3         6           9 ...
Tree Structure    1          4         7    25         6    3    9        8
Data Structure index        0           1           2            3           4content   parent node parent node parent nod...
Find Operation            node   parent    1             1       1    2        2       15       6    5       2            ...
How to determine that node 2 and node 6 in             the same set?         1         2     5       6
How to determine that node 2 and node 6 in             the same set?         1                       2         2          ...
How to determine that node 2 and node 6 in             the same set?         1                       2     1         2    ...
How to determine that node 2 and node 6 in             the same set?         1                       2     1         2    ...
Source Code// parent is an array stored the parentof nodes.int findSet( int x ) {    if ( parent[ x ] == x )      return x...
If the height of tree is very large...              ...                          }              ...        ...         ......
Reduce Height    1    25        6
Reduce Height    1                        1    2                  5         65        6              2
Reduce Height            node   parent    1        1       1             2       15       6    2             5       1    ...
Source Code// parent is an array stored the parent ofnodes.int findSet( int x ) {    if ( parent[ x ] == x )      return x...
Union Operation        1              7        25            6     9       8    Height = 3    Height = 2
Union Operation        1              7        25            6     9       8    Height = 3    Height = 2
Union Operation             1     2                7 5       6       9        8         Height = 3
Source Code// parent is an array stored the parent ofnodes.// height is an array stored the height of treevoid unionSet( i...
Time ComplexityFind Operation    O(1)Union Operation   O(1)
Practice Now[UVa] 10583 - Ubiquitous Religions
10583 - Ubiquitous Religions    佛教       佛教      基督教    佛教      基督教      佛教   基督教       佛教      回教
10583 - Ubiquitous Religions    佛教       佛教      基督教    佛教      基督教      佛教   基督教       佛教      回教
10583 - Ubiquitous Religions    佛教       佛教      基督教    佛教      基督教      佛教   基督教       佛教      回教
10583 - Ubiquitous Religions    佛教       佛教      基督教    佛教      基督教      佛教   基督教       佛教      回教
10583 - Ubiquitous Religions    佛教       佛教      基督教    佛教      基督教      佛教   基督教       佛教      回教
10583 - Ubiquitous Religions    佛教       佛教      基督教    佛教      基督教      佛教   基督教       佛教      回教
10583 - Ubiquitous Religions    佛教       佛教      基督教    佛教      基督教      佛教   基督教       佛教      回教
10583 - Ubiquitous Religions          佛教                                     回教佛教                  佛教     佛教        佛教    ...
Source Code#include <iostream>#include <cstdio>using namespace std;#define MAXN 50010int parent[ MAXN ], height[ MAXN ];in...
Practice Now [UVa] 10608 - Friends
Thank You for Your Listening.
Upcoming SlideShare
Loading in …5
×

[ACM-ICPC] Disjoint Set

652 views

Published on

Published in: Education
  • Be the first to comment

[ACM-ICPC] Disjoint Set

  1. 1. Disjoint Set 郭至軒(KuoE0) KuoE0.tw@gmail.com KuoE0.ch
  2. 2. Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) http://creativecommons.org/licenses/by-sa/3.0/ Latest update: Mar 13, 2013
  3. 3. Disjoint Set 中國譯:並查集 1 4 75 8 2 3 6 9
  4. 4. Disjoint Set 中國譯:並查集 1 4 75 8 2 3 6 9
  5. 5. Disjoint Set 中國譯:並查集 1 4 75 8 2 3 6 9
  6. 6. Disjoint Set 中國譯:並查集 1 4 75 8 2 3 6 9
  7. 7. Tree Structure 1 4 75 8 2 3 6 9 1
  8. 8. Tree Structure 1 4 7 25 6 3 9 8
  9. 9. Data Structure index 0 1 2 3 4content parent node parent node parent node parent node parent node The parent of root is itself!
  10. 10. Find Operation node parent 1 1 1 2 2 15 6 5 2 6 2
  11. 11. How to determine that node 2 and node 6 in the same set? 1 2 5 6
  12. 12. How to determine that node 2 and node 6 in the same set? 1 2 2 6 5 6
  13. 13. How to determine that node 2 and node 6 in the same set? 1 2 1 2 6 2 5 6
  14. 14. How to determine that node 2 and node 6 in the same set? 1 2 1 2 6 2 1 5 6
  15. 15. Source Code// parent is an array stored the parentof nodes.int findSet( int x ) { if ( parent[ x ] == x ) return x; return findSet( parent[ x ] );}
  16. 16. If the height of tree is very large... ... } ... ... ... n ... ...
  17. 17. Reduce Height 1 25 6
  18. 18. Reduce Height 1 1 2 5 65 6 2
  19. 19. Reduce Height node parent 1 1 1 2 15 6 2 5 1 6 1
  20. 20. Source Code// parent is an array stored the parent ofnodes.int findSet( int x ) { if ( parent[ x ] == x ) return x; return parent[ x ] = findSet( parent[ x ] );}
  21. 21. Union Operation 1 7 25 6 9 8 Height = 3 Height = 2
  22. 22. Union Operation 1 7 25 6 9 8 Height = 3 Height = 2
  23. 23. Union Operation 1 2 7 5 6 9 8 Height = 3
  24. 24. Source Code// parent is an array stored the parent ofnodes.// height is an array stored the height of treevoid unionSet( int a, int b ) { if ( a == b ) return; if ( height[ a ] > height[ b ] ) parent[ b ] = a; else { parent[ a ] = b; if ( height[ a ] == height[ b ] ) ++height[ b ]; }}
  25. 25. Time ComplexityFind Operation O(1)Union Operation O(1)
  26. 26. Practice Now[UVa] 10583 - Ubiquitous Religions
  27. 27. 10583 - Ubiquitous Religions 佛教 佛教 基督教 佛教 基督教 佛教 基督教 佛教 回教
  28. 28. 10583 - Ubiquitous Religions 佛教 佛教 基督教 佛教 基督教 佛教 基督教 佛教 回教
  29. 29. 10583 - Ubiquitous Religions 佛教 佛教 基督教 佛教 基督教 佛教 基督教 佛教 回教
  30. 30. 10583 - Ubiquitous Religions 佛教 佛教 基督教 佛教 基督教 佛教 基督教 佛教 回教
  31. 31. 10583 - Ubiquitous Religions 佛教 佛教 基督教 佛教 基督教 佛教 基督教 佛教 回教
  32. 32. 10583 - Ubiquitous Religions 佛教 佛教 基督教 佛教 基督教 佛教 基督教 佛教 回教
  33. 33. 10583 - Ubiquitous Religions 佛教 佛教 基督教 佛教 基督教 佛教 基督教 佛教 回教
  34. 34. 10583 - Ubiquitous Religions 佛教 回教佛教 佛教 佛教 佛教 基督教 基督教 基督教
  35. 35. Source Code#include <iostream>#include <cstdio>using namespace std;#define MAXN 50010int parent[ MAXN ], height[ MAXN ];int main() { int n, t = 0, e, a, b; while ( scanf( “%d %d”, &n, &e ) && n && e ) { for ( int i = 1; i <= n; ++i ) parent[ i ] = i; height[ i ] = 1; for ( int i = 0; i < e; ++i ) { scanf( “%d %d”, &a, &b ); unionSet( findSet( a ), findSet( b ) ); } int ret = 0; for ( int i = 1; i <= n; ++i ) if ( parent[ i ] == i ) ++ret; printf( “Case %d: %dn”, ++t, ret ); } return 0;}
  36. 36. Practice Now [UVa] 10608 - Friends
  37. 37. Thank You for Your Listening.

×