POJ 1860(SPFA正決意リング)

  質問の意味:私たちの街は、為替のいくつかのポイントがあります。私たちは各点は特別な二つの通貨を交換することができていることを前提としましょう。同じ為替を専門にいくつかのポイントがあるかもしれません。各点は、独自の通貨を持って、BとBへの為替レートは、あなたの1Aの数です。同時に、各為替手数料のいくつかのポイントがあり、合計があなたの操作を交換したいです。お金は常に手数料の源です。

29.75 = 2963.3975ルーブル× - あなたは手数料が0.39である一方、為替レートは、29.75であるロシアルーブル交換ポイントに$ 100を変更したい場合たとえば、あなたは(0.39 100)を取得します。

あなたは私たちの街にあなたは異なる通貨を扱うことができることを知っている必要があります。各通貨がNよりも小さい一つだけの整数で表現されてみましょう 各スイッチングポイント、整数テーブル6を説明することができる:aおよびb手数料に対するB、通貨Bに、委員会にB、Bに交換し、二つの通貨の整数を表します。

  Q:ニックは、いくつかのお金が通貨Sであり、彼は彼の資本を高めるために、いくつかの操作(別の交換ポイントで交換)を渡したいです。もちろん、彼は最後の手にお金を望んでいた、まだSです。彼はこの願望を達成することができれば、彼はこの困難な問題を解決するには、参照してください。

  アイデア:このタイトルは、ハングアップする翻訳。SPFAは、いくつかの詳細に対処するために、double型の存在に注意し、宣告された裸の環であり、

書式#include <iostreamの> 
の#include <cmath> 
の#include <cstdioを> 
する#include <CStringの> 
の#include < 文字列 > 
の#include <マップ> 
書式#include <iomanip> 
書式#include <アルゴリズム> 
書式#include <キュー> 
の#include <スタック> 
#include < セット > 
の#include <ベクトル>
 // CONST int型MAXN = 1E5 + 5。
#defineは長い長いっ
{(-1,11,11- b)はLLのGCDをリターン?B GCD(B、%の; B)} 
(-1,11,11- b)は{LLのLCM 戻り、(/ GCDを// constのint型INF = 0x6fffffff; 

#define MAX INT_MAXの
 に#define(I、a、b)は(;;私は= Bの<++ I私は= INT)のためFOR
 の#defineバグはcout << "------------- - "<< ENDL
 使用して 名前空間はstdを、
INT版[ 210 ]、ヘッド[ 210 ]、[次の210 VIS]、[ 210 ]、ANS [ 210 ]。
INTの最初のTOT、N、M、。
ダブルお金;
二重 HL [ 210 ]、LX [ 210 ]、D [ 210 ]。
無効アドオン(int型のx、int型のy、ダブルH、ダブルL)
{ 
    版[ ++ TOT = Y、HL [TOT = hを、LX [TOT = L、次の[TOT =頭部[X]、ヘッド[X] = TOT。
} 
int型spfa()
{ 
    キュー < INT > QUE。
    memsetの(VIS、0はsizeof (VIS))。
    memsetの(D、0はsizeof (d)参照)。
    Dが[最初] = お金。
    VIS [第] = 1 
    ANS [第] = 1 
    que.push(最初の); 

    一方、(que.size())
    { 
        int型のx =que.front(); que.pop(); 
        VIS [X] = 0 

        以下のためにint型 I =ヘッド[X]; I; I = 次の[I])
        { 
            int型、Y = 版[I];
            ダブル時間=のHL [i]は、L個の=のLX [I]。        // COUT << X <<」「<< Y << ENDL。
            もし(D [Y] <(D [X] - L)* H)
            { 
                D [Y] =(D [X] - L)*はH;
                もし(VIS [Y] == 0 
                { 
                    VIS [Y] = 1 
                    que.push(Y)。
                    ANS [Y]  ++もし(ANS [Y]> = N)
                    { 
                        返す 1 
                    } 
                } 
            } 
        } 
    } 
    戻り 0 

} 
int型のmain()
{ 
      IOS :: sync_with_stdio()。
    CIN >> N >> M >>第>> お金。
    ながら(M-- 
    { 
        int型、B。
        ダブルAB1、AB2、BA1、BA2。
        CIN >> A >> B >> AB1 >> AB2 >> BA1 >> BA2。
        (A、B、AB1、AB2)を加えます。
        (B、BA1、BA2)を加えます。
    } 
    であれば(spfa()== 1)COUT << " YES " << ENDL。
    他の裁判所未満<< " NO " << てendl; 
}

 

おすすめ

転載: www.cnblogs.com/jrfr/p/11364261.html