rt,调了好久

有大佬能帮忙调一下吗
#include<bits/stdc++.h>
#define N 90005
using namespace std;
int n,m,dis[N],cnt,h[N],in[N],out[N];
bool vis[N];
long double t[N],ans[N];
struct cmp{
bool operator() (const int&a,const int&b){return dis[a]<dis[b];}
};
struct Edge{int to,nxt,num;}edge[N];
inline void edge_add(int u,int v,int i){edge[++cnt]=(Edge){v,h[u],i},h[u]=cnt;}
inline void edgeadd(int u,int v,int i){edge_add(u,v,i),edge_add(v,u,i);}
struct node{
int dis,pos;
bool operator < (const node&x)const{return x.dis<dis;}
};
signed main(){
scanf("%d%d",&n,&m);
for(int x,y,i=1;i<=m;i++)scanf("%d%d",&x,&y),edgeadd(x,y,i);
for(int i=1;i<=n;i++){
memset(out,0,sizeof(out));out[i]=1;
memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));dis[i]=0;
queue < int > q;
priority_queue < int , vector < int > , cmp > q1;
q.push(i);
while(!q.empty()){
int t=q.front();
q.pop();
bool f=0;
for(int j=h[t];j;j=edge[j].nxt)
if(dis[edge[j].to]>dis[t]+1){
dis[edge[j].to]=dis[t]+1;out[edge[j].to]=out[t];
q.push(edge[j].to);f=1;
}
else if(dis[edge[j].to]==dis[t]+1)out[edge[j].to]+=out[t],f=1;
if(!f)q1.push(t);
}
for(int j=1;j<=n;j++)scanf("%Lf",t+j);
memset(vis,0,sizeof(vis));vis[i]=1;
while(!q1.empty()){
int u=q1.top();q1.pop();
for(int i=h[u];i;i=edge[i].nxt){
int v=edge[i].to;if(dis[u]^(dis[v]+1))continue;long double t1=(long double)t[u]/out[u]*out[v];
ans[edge[i].num]+=t1;t[v]+=t1;
if(!vis[v])vis[v]=1,q1.push(v);
}
}
}
for(int i=1;i<=m;i++)printf("%.1Lf\n",ans[i]+1e-12);
return 0;
}