Mam problem z takim zadaniem: https://sio2.mimuw.edu.pl/c/oij15-wiekuisty-oboz/p/bez/
Wydaje mi się, że wystarczy zliczyć liczbę liści, i wynik to (liczba_liści + 1) / 2, bo łączymy każde dwa liście. Dostaję 52pkt(podejrzewam, że tylko pierwszy wiersz wejścia wypisuję dobrze, bo pisze ograniczenie, że tylko za pierwszy wiersz dobry jest 50pkt), kompletnie nie wiem gdzie jest błąd, debuguję już chyba z godzinę i nie dowieżam co się dzieje. W wypisywaniu poprostu siłowo paruję każde dwa liście.
Kod:
#include <iostream>
#include <vector>
using namespace std;
int n = 0, a = 0, b = 0;
vector<int> ile_wchodzi;
vector<int> jakie_maja_stopien_jeden;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
if (n == 1)
{
cout << "0" << '\n';
return 0;
}
ile_wchodzi.assign(n+1,0);
for (int i = 0; i < n-1; ++i)
{
cin >> a >> b;
ile_wchodzi[a]++;
ile_wchodzi[b]++;
}
for (int i = 1; i <= n; ++i)
if (ile_wchodzi[i] == 1)
jakie_maja_stopien_jeden.push_back(i);
cout << (jakie_maja_stopien_jeden.size() + 1) / 2 << '\n';
if (jakie_maja_stopien_jeden.size() % 2 == 0)
{
for (int i = 0; i < jakie_maja_stopien_jeden.size(); i+=2)
cout << jakie_maja_stopien_jeden[i] << ' ' << jakie_maja_stopien_jeden[i+1] << '\n';
}
else
{
for (int i = 0; i < jakie_maja_stopien_jeden.size() - 1; i+=2)
cout << jakie_maja_stopien_jeden[i] << ' ' << jakie_maja_stopien_jeden[i+1] << '\n';
cout << jakie_maja_stopien_jeden[0] << ' ' << jakie_maja_stopien_jeden[jakie_maja_stopien_jeden.size()-1] << '\n';
}
return 0;
}