In this HackerEarth What's wrong with this CYPHER guys? problem solution CYPHER is well known for setting hard problems for the contest. During Code Apocalypse, many teams were not able to solve single problem. So we decided to do something different for the next contest. We will allow teams to work together but only we can decide which teams will work together. If we say Team A can work with Team B and Team B can work with Team C then it means that Team A can also work with Team C and vice-versa.

Now we repeatedly announce two type of announcements.

First: J X Y which means Team X can work with Team Y.

Second:? X Y were you have to find if Team X and Team Y can work together.

For every Second type of announcement you will tell yes if the team can work together and no if the teams cannot work together.

Output the total number of yes and number of no.


HackerEarth What's wrong with this CYPHER guys? problem solution


HackerEarth What's wrong with this CYPHER guys? problem solution.

#include <stdio.h>
#include <string.h>
int dj[100007];
int parent(int i ){
    while( dj[i]!=i){
        i = dj[i] = dj[dj[i]];
    }
    return i;
}
int main()
{
    int t, x, y, n, q, p1, p2, ys, no;
    char ch;
    scanf("%i", &t);
    while(t--){
        scanf("%i %i",&n,&q);
        for(int i=0;i<=n;i++)
            dj[i] = i;
        ys = no = 0;
        while(q--){
            scanf(" %c %i %i", &ch, &x, &y);
            p1 = parent( x);
            p2 = parent( y);
            if(ch == 'J'){
                dj[p1] = p2;
            }else{
                if(p1==p2)
                    ys++;
                else
                    no++;
            }

        }
        printf("%i %i\n",ys,no);
    }
    return 0;
}