Exemple #1
0
int main()
{
	int cases,n,i,a,b,y,no,t = 0;
	char c;
	scanf("%d",&cases);
	while(cases--){
		if(t != 0)
			printf("\n");
		t++;
		scanf("%d",&n);
		for (i = 0; i <= n; i++)
			Make_Set(i);
		y = no = 0;
		getchar();
		while(c = getchar(),c != EOF){
			if(c == '\n')	break;
			scanf(" %d %d",&a,&b);
			a = Find_Set(a);
			b = Find_Set(b);
			if(c == 'c')
				Union_Set(a,b);
			else if(c == 'q'){
				if(a == b)
					y++;
				else
					no++;
			}
			else
				break;
			getchar();
		}		
		printf("%d,%d\n",y,no);
	}
	return 0;
}
Exemple #2
0
// compute the connected components of a graph
void Connected_Components(void) {
	int i;
	for (i = 0; i < N; i++)
	{
		Make_Set(i);
	}

	for (i = 0; i < 7; i++)
	{
		if(Find_Set(E[i][0])!=Find_Set(E[i][1]))
		{
			Union(E[i][0],E[i][1]);
		}
	}
}
Exemple #3
0
void MST_Kruskal(struct vertex *G,int n,int E)
{
	int i,j;
        struct edge *A[n-1],*temp,*e[E];
        for(i=0;i<n;i++)
                Make_Set(G,i);
       for(i=0,j=0;i<n;i++)
		for(temp=G[i].edgep;temp;temp=temp->next)
			e[j++]=temp;
        Heap_Sort(e,E);
        for(i=0,j=0;i<E;i++)
    		if(Find_Set(G,e[i]->start)!=Find_Set(G,e[i]->destin))
       		{
       			A[j++]=e[i];
        		Union(G,e[i]->start,e[i]->destin);
        	}
        Vertex_Detail_Prim(A,j);
}
Exemple #4
0
int main()
{
	freopen("t.in", "r", stdin);
	scanf("%d %d\n",&n,&k);
	for(int i = 1; i <= n; i ++) Make_Set(i);
	for(int i = 1, d, x, y; i <= k; i ++)
	{
		scanf("%d %d %d\n",&d,&x,&y);
		if(x > n || y > n || (d == 2 && x == y))
		{
			cnt ++;
			continue;
		}
		int p = Find_Set(x), q = Find_Set(y);
		if(p != q)
			Union(x, y, d);
		else
			if((relation[y] + d + 2) % 3 != relation[x]) cnt ++;
	}
	printf("%d\n",cnt);
}
Exemple #5
0
int main()
{
    int a, b;
    while(scanf("%d", &N) && N)
    {
        for(int i=1; i<=N; ++i)
            Make_Set(i);
        scanf("%d", &M);
        while(M--)
        {
            scanf("%d %d", &a, &b);
            Union(a, b);
        }
        int cnt = -1;
        for(int i=1; i<=N; ++i)
            if(father[i]==i)
                cnt++;
        printf("%d\n", cnt);
    }
    return 0;
}
Exemple #6
0
int main()
{
	freopen("t.in","r",stdin);
	scanf("%d", &m);
	int n = MAXN;
	for(int i = 1; i <= n; i ++) Make_Set(i);
	for(int i = 1; i <= m; i ++)
	{
		int a, b;
		char ctrl;
		scanf("\n%c %d", &ctrl, &a);
		if(ctrl == 'M') scanf("%d", &b);
		if(ctrl == 'M')
			Merge(a, b);
		else
		{
			Find_Set(a);
			printf("%d\n", dist[a]);
		}
	}
}