• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Dlaczego mój program daje złe wyniki? Zadanie Łuk Triumfalny OI (drzewa)

Object Storage Arubacloud
0 głosów
189 wizyt
pytanie zadane 21 stycznia 2021 w Algorytmy przez wojtek_suchy Mądrala (6,880 p.)
zamknięte 21 stycznia 2021 przez wojtek_suchy

Mam takie zadanie: https://szkopul.edu.pl/proble[...]mxA6GujfX/site/?key=statement
No i lecę sobie DFS i sprawdzam w każdym wierzchołku czy potrzebuje dodatkowych robotników, program daje błędny wynik dopiero w testach gdy n > 1000 więc trudno coś takiego debuggować. Program zwraca zbyt mały wynik np. potrzeba 6 robotników a mój program zwraca 5. Czy ktoś pomógłby mi znaleźć relatywnie małe testy dla których mój program daje błędne odpowiedzi?

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ull unsigned long long

#define fi first
#define se second

#define FOR(x, y, z) for (int z = x; z < y; z++)
#define FORD(x, y, z) for (int z = x; z > y; z--)

const int MAXN = 3e5 + 7;
vector<vector<int>> graph(MAXN);
int min_need_workers = 0;

void dfs(int p, int idx, int deep, int prev_need_bows_to_build, int act_workers){
    while((int)graph[idx].size()-(p!=-1) + prev_need_bows_to_build > act_workers * deep)
        act_workers++;
    for (auto child : graph[idx]){
        if (child != p)
            dfs(idx, child, deep+1, prev_need_bows_to_build+graph[idx].size()-(p!=-1), act_workers);
    }
    min_need_workers = max(min_need_workers, act_workers);
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(nullptr); cout.tie(nullptr);
    int n, a, b;
    cin >> n;
    FOR(0, n-1, i){
        cin >> a >> b;
        graph[a].push_back(b);
        graph[b].push_back(a);
    }

    dfs(-1, 1, 1, 0, 0);

    cout << min_need_workers << "\n";

    return 0;
}
komentarz zamknięcia: Źle zrozumiałem treść zadania

1 odpowiedź

0 głosów
odpowiedź 21 stycznia 2021 przez Wiciorny Ekspert (269,790 p.)
W tego typu zadanich, gdzie operacje na liczbach mogą być duże zwykle problem leży w tym, że operujesz na int a nie np double, czy float. gdyż ich zakres jest większy.
Tym bardziej, że warunek rzutujesz na int, co może powodować ucinanie pewnych wartości
komentarz 21 stycznia 2021 przez wojtek_suchy Mądrala (6,880 p.)
Niestety nie :(, wszystko mieści się w zakresach, a teraz  nawet znalazłem błędy test:

15
1 2
1 3
3 4
4 5
4 6
4 7
4 12
4 13
3 8
8 9
8 10
8 11
8 14
8 15

Podobne pytania

0 głosów
1 odpowiedź 570 wizyt
0 głosów
1 odpowiedź 303 wizyt
pytanie zadane 21 stycznia 2023 w Algorytmy przez hharry33 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 303 wizyt
pytanie zadane 28 sierpnia 2023 w C i C++ przez Dudziu Nowicjusz (120 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...