Cześć, zwracam się do was o pomoc w znalezieniu winowajcy w kodzie na spoj.
Napisałem trochę co prawda zagmatwany algorytm (jestem początkujący), ale wyjście zgadza się z tym pokazanym na spoju sędzia jednak nie uznaje mi programu i wywala błędną odpowiedź.
Oto zadanie:
A oto mój kod:
#include <iostream>
using namespace std;
int liczby[101];
int main()
{
int l1, l2;
int zestawy; cin >> zestawy;
int skladowa = 1;
int sk = 1;
int max = 0;
for (int i = 0; i < zestawy; i++)
{
int pary; cin >> pary;
for (int j = 0; j < pary; j++)
{
cin >> l1; cin >> l2;
if (l1 > max) max = l1;
if (l2 > max) max = l2;
if (j == 0)
{
liczby[l1] = 1;
liczby[l2] = 1;
}
else
{
if ((liczby[l1] == 0) ^ (liczby[l2] == 0))
{
if (liczby[l1] > liczby[l2])
liczby[l2] = liczby[l1];
else
liczby[l1] = liczby[l2];
}
else if (liczby[l1] == 0 && liczby[l2] == 0)
{
skladowa++; sk++;
liczby[l1] = skladowa;
liczby[l2] = skladowa;
}
else if (liczby[l1] == liczby[l2])
continue;
else
{
sk--;
if (liczby[l1] > liczby[l2])
{
for (int h = 1; h <= max; h++)
{
if (liczby[h] == liczby[l1])
liczby[h] = liczby[l2];
}
}
else
{
for (int h = 1; h <= max; h++)
{
if (liczby[h] == liczby[l2])
liczby[h] = liczby[l1];
}
}
}
}
}
int* tablica = new int[max+1];
int kolejnosc = 0;
for (int j = 1; j <= max; j++)
{
if (liczby[j] == 0)
{
kolejnosc++;
tablica[j] = kolejnosc;
}
else
{
bool x = true;
for (int h = j-1; h >= 1; h--)
{
if (liczby[j] == liczby[h])
{
tablica[j] = tablica[h];
x = false;
break;
}
}
if (x)
{
kolejnosc++;
tablica[j] = kolejnosc;
}
}
}
for (int j = 1; j <= kolejnosc; j++)
{
cout << j << ": ";
for (int h = 1; h <= max; h++)
{
if (tablica[h] == j)
cout << h << " ";
}
cout << endl;
}
cout << endl;
for (int j = 0; j <= 100; j++)
liczby[j] = 0;
}
return 0;
}