rt,我真找不到和TJ有什么差别了
#include<bits/stdc++.h>
using namespace std;
int n,m,L[300005],vis[300005],cnt[300005];
double dis[300005],summ[300005];
vector<int>y[300005];
priority_queue<pair<int,int> >q;
void dij(){
q.push(make_pair(0,n));
dis[n]=0.0;
while(!q.empty()){
int now=q.top().second;
q.pop();
if(vis[now])continue;
vis[now]=1;
for(int i=0;i<y[now].size();i++)if(!vis[y[now][i]]){
summ[y[now][i]]+=dis[now];
cnt[y[now][i]]++;
dis[y[now][i]]=(summ[y[now][i]]+L[y[now][i]])/cnt[y[now][i]];
q.push(make_pair(-dis[y[now][i]],y[now][i]));
}
}
return;
}
signed main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
y[a].push_back(b);
y[b].push_back(a);
L[a]++;
L[b]++;
}
dij();
printf("%.7lf\n",dis[1]);
return 0;
}