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

515 views
433 views

Published on

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
515
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
24
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

[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.

×