Waterslide(45/100) problemi di precisione?

precisamente mi sbaglia un task nel subtask 5 e due nel subtask 3 non capisco l errore

using namespace std;
int m,n,p;
stack<int>ok;
vector<int>graph[(int)1e5+1];
long double vet[(int)1e5+1];
int topv[(int)1e5+1],vis[(int)1e5+1];

void topo(int node){
	for(int x:graph[node]){
		vis[x]--;
		if(vis[x]==0){
			topo(x);
		}
	}
	ok.push(node);
}

int main(){
	cin>>n>>m>>p;
	for(int i=0;i<m;i++){
		int da,a;
		cin>>da>>a;
		vis[a]++;
		graph[da].push_back(a);
	}
	topo(0);
	ok.push(0);
	for(int i=0;i<n;i++){
		topv[i]=ok.top();
		ok.pop();
	}
	vet[0]=1.0;
	for(int i=0;i<n;i++){
		if(graph[topv[i]].size()>0){
			long double okr=vet[topv[i]]/((long double)graph[topv[i]].size());
			vet[topv[i]]=0;
			for(int x:graph[topv[i]]){
				vet[x]+=okr;
			}
		}
	}
	cout<<max_element(vet,vet+n)-vet;
}

risolto tutto volevo provare a modificare l andamento del topological sort ,ma andava ad influire negativamente sulla chiamata ricorsiva ,facendomi sbagliare gli elementi dello stack.