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

[TOJ] 63 - D.網子把戲

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

    [LV.7]常住居民III

    142

    主題

    686

    帖子

    3559

    積分

    邁向天堂

    蘇多門

    Rank: 8Rank: 8

    積分
    3559

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

    跳轉到指定樓層
    樓主
    發表於 2014-7-17 17:00:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

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

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

    x
    http://toj.tfcis.org/oj/pro/63/

    用Floyd-Warshall演算法就可解決,求出所有點的最短路徑,然後最遠的兩點的距離就是答案。
    這題要注意的是: 兩顆珠子之間可能會有多條繩子,必須取min才會AC  (LFsWang的題目總是有陷阱啊! 我又掉進去了)

    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int d[100][100];
    int main()
    {
    	int T;
    	cin>>T;
    	int v,e;
    	while(T--)
    	{
    		cin>>v>>e;
    		for(int i=0;i<v;i++)
    			for(int j=0;j<v;j++)
    				d[i][j]=1e7;
    		for(int i=0;i<e;i++)
    		{
    			int a,b,c;
    			cin>>a>>b>>c;
    			d[a][b]=d[b][a]=min(d[a][b],c); //陷阱 
    		}
    		for(int i=0;i<v;i++)
    			d[i][i]=0;
    		for(int i=0;i<v;i++)
    			for(int j=0;j<v;j++)
    				for(int k=0;k<v;k++)
    					d[j][k]=min(d[j][k],d[j][i]+d[i][k]);
    		int ans=0;
    		for(int i=0;i<v;i++)
    			for(int j=0;j<v;j++)
    				ans=max(ans,d[i][j]);
    		cout<<ans<<endl;
    	}
    }
    

    評分

    參與人數 1金幣 +6 收起 理由
    Sylveon + 6 圖論的多重編要小心XD

    查看全部評分

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

    使用道具 檢舉

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

    本版積分規則

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