Water_park 15/100

allora premessa che secondo la mia analisi il codice, come algoritmo, non è sbagliato (può essere che invece io mi sbagli). Ora ho un problema molto strano. Se passo le variabili per riferimento allora, il codice darà per buono alcuni casi. Se invece non le passo per riferimento, il codice si comporterà in tutt’altra maniera, uscendo prima dai for, ma rendendo esatti altri testcase che in caso contrario sarebbero sbagliati. Allego il codice:

#include <stdio.h>
#include <assert.h>
#include <utility> 
#include <list> 
#include <vector> 
#include <iostream>
#define MAXM 200000
using namespace std; 
vector<int> nodiuscenti(MAXM, 0);
 
vector<vector<int>> nodicollegati(MAXM); 
vector<double> risultatipernodo(MAXM, 0); 
int i = 0; 
int l = 0; 
void calcolonodi(int &index, double numerocollegato){
    //cout << "A" << endl;
    //cout << "Nodiuscenti per indice " << index << " = " << nodiuscenti[index]; 
    for(l = 0; l < nodiuscenti[index]; l++){
        risultatipernodo[nodicollegati[index].at(i)] += numerocollegato / nodiuscenti[index]; 
        //cout << "Arrivo qua " << endl; 
        if(nodicollegati[nodicollegati[index].at(i)].size() > 0)calcolonodi(nodicollegati[index].at(i), risultatipernodo[i]); 
    }
}

int find_pool(int N, int M, int P, int A[], int B[]) {
    // insert your code here
    
    double max = 0;   
    int nodomax = -1; 
    for(int i = 0; i < M; i++){
        nodiuscenti[A[i]]++;  
        nodicollegati[A[i]].push_back(B[i]);
    }
    i = 0; 
    risultatipernodo[i] = 1; 
    calcolonodi(i, risultatipernodo[i]);
    //cout << "Arrivo qua" << endl; 
    for(int i = 0; i < N; i++){
        if(risultatipernodo[i] > max && nodiuscenti[i] == 0){
            max = risultatipernodo[i]; 
            nodomax = i; 
        }
    }
    return nodomax;
}


int A[MAXM];
int B[MAXM];

int main() {
    FILE *fr, *fw;
    int N, M, P;

    fr = fopen("input.txt", "r");
    fw = fopen("output.txt", "w");
    assert(3 == fscanf(fr, "%d %d %d", &N, &M, &P));
    for(i=0; i<M; i++)
        assert(2 == fscanf(fr, "%d %d", &A[i], &B[i]));

    fprintf(fw, "%d\n", find_pool(N, M, P, A, B));
    fclose(fr);
    fclose(fw);
    return 0;
}