趕快加入我們來參與討論吧!
您需要 登錄 才可以下載或查看,沒有帳號?加入我們
x
這題是不是有甚麼奇怪陷阱? 網路上寫說要用long double結果我還是WA
而且要怎麼判斷什麼時候該用long double呢?
[C++] 純文本查看 復制代碼 #include<iostream>
#include<cfloat>
#include<iomanip>
using namespace std;
struct edge{int a,b; double cost;};
edge e[25010];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n,m,a,b;
long double v;
cin>>n>>m>>v>>a>>b;
a--; b--;
for(int i=0;i<m;i++)
{
int a,b;
double c;
cin>>a>>b>>c;
a--; b--;
e[i]={a,b,c};
}
long double dis[2010];
for(int i=0;i<n;i++)
dis[i]=DBL_MAX;
dis[a]=v;
for(int i=0;i<n;i++)
{
bool update=false;
for(int i=0;i<m;i++)
if(dis[e[i].a]!=DBL_MAX && dis[e[i].a]*e[i].cost < dis[e[i].b])
{
dis[e[i].b] = dis[e[i].a]*e[i].cost;
update=true;
}
if(!update) break;
if(i==n-1) dis[b]=0;
}
cout<<fixed<<setprecision(0)<<dis[b]<<endl;
}
|