yoyoboyss

Untitled

May 14th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 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 mmax = 0, 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 <= N; i++){
  40. int flw_1 = 0, flw_2 = 0;
  41. for(int j = 1; j <= M; j++){
  42. scanf("%d", &flw);
  43. if(!dis[flw]){
  44. if(flw_1 == 0){
  45. flw_1 = flw;
  46. dis[flw_1] = 1;
  47. } else if(flw != flw_1){
  48. flw_2 = flw;
  49. dis[flw_2] = 1;
  50. Unite(flw_1, flw_2);
  51. }
  52. }
  53. }
  54. }
  55.  
  56. for(int i = 1; i <= N; i++)
  57. printf("%d ", Find(arb[i]));
  58.  
  59. return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment