Pagini recente » Cod sursa (job #2388906) | Cod sursa (job #1422960) | Cod sursa (job #1041370) | Cod sursa (job #2566618) | Cod sursa (job #662853)
Cod sursa(job #662853)
#include <stdio.h>
#define MAX 100001
int v[2][MAX];
int n,m;
int find(int x)
{
int a, b;
a=x;
while (v[0][a]!=a) a=v[0][a];
while (v[0][x] != x)
{
b = v[0][x];
v[0][x] = a;
x = b;
}
return a;
}
void unite(int x, int y)
{
if (v[1][x] > v[1][y])
v[0][y] = x;
else v[0][x] = y;
if (v[1][x] == v[1][y]) v[1][y]++;
}
int main()
{
FILE *in=fopen("bellmanford.in","r");
FILE *out=fopen("bellmanford.out","w+");
fscanf(in,"%d %d\n", &n, &m);
int x,y,c;
for (int i=1; i<=n; ++i)
{
v[0][i] = i;
v[1][i] = 1;
}
for (int i=1; i<=m; ++i)
{
fscanf(in,"%d %d %d\n", &c, &x, &y);
if (c == 2)
{
if (find(x) == find(y)) fprintf(out,"DA\n");
else fprintf(out,"NU\n");
}
else unite(find(x), find(y));
}
fclose(in);
fclose(out);
return 0;
}