查看: 1765|回復: 0
打印 上一主題 下一主題

[提問] hoj 9

[複製鏈接]
  • TA的每日心情
    開心
    2015-4-12 10:09
  • 簽到天數: 137 天

    [LV.7]常住居民III

    142

    主題

    686

    帖子

    3559

    積分

    邁向天堂

    蘇多門

    Rank: 8Rank: 8

    積分
    3559

    新手達陣台南一中資訊社程式設計達人 - 2014

    跳轉到指定樓層
    樓主
    發表於 2014-11-20 23:24:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    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;
    }
    

    蘇多門 domen111
    My Web: https://sites.google.com/site/domenprg/
    回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表