Cod sursa(job #2635481)

Utilizator RaduQQTCucuta Radu RaduQQT Data 14 iulie 2020 16:42:41
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


typedef struct listNode
{
	listNode* next;
	listNode* final;
	int multime;
	int numar;
};

listNode* list[100111];
int main()
{
	freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out","w",stdout);

	int n, m;
	scanf("%d%d", &n, &m);

	for (int i = 1; i <= n; i++)
	{
		listNode* node = (listNode*)malloc(sizeof(listNode));
		node->numar = i;
		node->multime = i;
		node->next = NULL;
		node->final = node;
		list[i] = node;
	}

	int cod, x, y;
	for (int i = 0; i < m; i++)
	{
		scanf("%d%d%d", &cod, &x, &y);
		if (cod == 1)
		{
			if (list[x]->multime < list[y]->multime)
			{
				listNode* p = list[y];
				p->multime = list[x]->multime;
				while (p->next != NULL)
				{
					p = p->next;
					p->multime = list[x]->multime;
				}

				list[list[x]->multime]->final->next = list[y];
				list[list[x]->multime]->final = p;
			}
			else
			{
				listNode* p = list[x];
				p->multime = list[y]->multime;
				while (p->next != NULL)
				{
					p = p->next;
					p->multime = list[y]->multime;
				}

				list[list[y]->multime]->final->next = list[x];
				list[list[y]->multime]->final = p;
			}
		}
		else
		{
			if (list[x]->multime == list[y]->multime)
				printf("DA\n");
			else
				printf("NU\n");
		}
	}
}