求助!
查看原帖
求助!
808773
forever516楼主2024/12/16 19:52

爆0!

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e3+10,eps=1e-8;
vector<int>g[N];
int st[N][N],d[N],du[N];
bool vis[N];
double f[N][N];
void spfa(int s){
	memset(d,0x3f,sizeof(d));
	memset(vis,0,sizeof(vis));
	queue<int>q;
	vis[s]=1;
	d[s]=0;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(int i=0;i<g[u].size();i++){
			int v=g[u][i];
			if(!vis[i]&&d[v]>d[u]+1){
				q.push(v);
				st[v][s]=u;
				d[v]=d[u]+1;
				vis[v]=1;
			}else if(d[v]==d[u]+1&&st[v][s]>u)st[v][s]=u;
		}
	}
}
double dfs(int c,int m){
	cout<<c<<" m="<<m<<endl;
	if(c==m)return 0;
	if(st[c][m]==m||st[st[c][m]][m]==m)return 1;
	if(fabs(f[c][m])>=eps)return f[c][m];
	double r=dfs(st[st[c][m]][m],m);
	for(int i=0;i<g[m].size();i++)r+=dfs(st[st[c][m]][m],g[m][i]);
	f[c][m]=r/(du[m]+1)+1;
	return f[c][m];
}
int main(){
	int n,e,c,m;
	cin>>n>>e>>c>>m;
	for(int i=1;i<=e;i++){
		int u,v;
		cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
		du[u]++;
		du[v]++;
	}
	for(int i=1;i<=n;i++)spfa(i);
	printf("%.3lf",dfs(c,m));
	
	return 0;
} 
2024/12/16 19:52
加载中...