站外题求助
  • 板块学术版
  • 楼主hexuchen
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/20 14:48
  • 上次更新2024/7/20 15:46:32
查看原帖
站外题求助
945742
hexuchen楼主2024/7/20 14:48

http://ybt.ssoier.cn:8088/problem_show.php?pid=1344

#include <bits/stdc++.h>
using namespace std;
int n,m,a,b,start,en;
double s[10001][10001],ans[10001],c;
bool p[10001];
void Dijkstra(){
	p[start]=true;
	for(int i=1;i<=n;i++){
		ans[i]=s[start][i];
	}
	for(int i=1;i<n;i++){
		int minn=1e9,a=-1;
		for(int j=1;j<=n;j++){
			if(!p[j] && ans[j]<=minn){
				minn=ans[j];
				a=j;
			}
		}
		if(a==-1)
			break;
		p[a]=true;
		for(int j=1;j<=n;j++){
			if(ans[j]<ans[a]*s[a][j]){
				ans[j]=ans[a]*s[a][j];
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			s[i][j]=-1e9;
		}
	}
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		s[a][b]=s[b][a]=(100-c)/100;
		//cout<<1-c/100.0<<endl;
	}
	cin>>start>>en;
	Dijkstra();
	/*for(int i=1;i<=n;i++){
		cout<<ans[i]<<' ';
	}*/
	cout<<fixed<<setprecision(8)<<100/ans[en];
	return 0;
}

写的代码除了样例,其他都过不了

2024/7/20 14:48
加载中...