Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int NMAX = 1004;
- int N, M, flw, i;
- int arb[NMAX], dis[NMAX];
- int Find(int x){
- int y = x, t;
- while(y != arb[y])
- y = arb[y];
- while(x != y){
- t = arb[x];
- arb[x] = y;
- x = t;
- }
- return y;
- }
- void Unite(int x, int y){
- x = Find(x);
- y = Find(y);
- arb[x] = y;
- }
- int main(){
- freopen("flori.in", "r", stdin);
- //freopen("flori.out", "w", stdout);
- int vmax = 0;
- scanf("%d%d", &N, &M);
- for(int i = 1; i <= N; i++)
- arb[i] = i;
- for(i = 1; i <= 1000; i++){
- int flw_1 = 0, flw_2 = 0;
- for(int j = 1; j <= M; j++){
- scanf("%d", &flw);
- if(flw > vmax)
- vmax = flw;
- if(!dis[flw]){
- if(flw_1 == 0){
- flw_1 = flw;
- arb[flw_1]=flw_1;
- dis[flw_1] = 1;
- } else if(flw != flw_1){
- flw_2 = flw;
- arb[flw_2]=flw_2;
- dis[flw_2] = 1;
- Unite(flw_1, flw_2);
- }
- }
- }
- }
- for(int i = 1; i <= vmax; i++)
- printf("%d ", Find(arb[i]));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment