yoyoboyss

Untitled

May 14th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int NMAX = 1004;
  5.  
  6. int N, M, flw, i;
  7. int arb[NMAX], dis[NMAX];
  8.  
  9. int Find(int x){
  10. int y = x, t;
  11. while(y != arb[y])
  12. y = arb[y];
  13. while(x != y){
  14. t = arb[x];
  15. arb[x] = y;
  16. x = t;
  17. }
  18.  
  19. return y;
  20. }
  21.  
  22. void Unite(int x, int y){
  23. x = Find(x);
  24. y = Find(y);
  25. arb[x] = y;
  26. }
  27.  
  28. int main(){
  29.  
  30. freopen("flori.in", "r", stdin);
  31. //freopen("flori.out", "w", stdout);
  32.  
  33. int vmax = 0;
  34.  
  35. scanf("%d%d", &N, &M);
  36. for(int i = 1; i <= N; i++)
  37. arb[i] = i;
  38.  
  39. for(i = 1; i <= 1000; i++){
  40. int flw_1 = 0, flw_2 = 0;
  41. for(int j = 1; j <= M; j++){
  42. scanf("%d", &flw);
  43. if(flw > vmax)
  44. vmax = flw;
  45. if(!dis[flw]){
  46. if(flw_1 == 0){
  47. flw_1 = flw;
  48. arb[flw_1]=flw_1;
  49. dis[flw_1] = 1;
  50. } else if(flw != flw_1){
  51. flw_2 = flw;
  52. arb[flw_2]=flw_2;
  53. dis[flw_2] = 1;
  54. Unite(flw_1, flw_2);
  55. }
  56. }
  57. }
  58. }
  59.  
  60. for(int i = 1; i <= vmax; i++)
  61. printf("%d ", Find(arb[i]));
  62.  
  63. return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment