poj2240 類似負權迴路

2022-07-24 00:39:25 字數 3986 閱讀 3356

題意:給出一些不同型別的貨幣和貨幣之間兌換的比例,求能否實現從一種硬幣開始到自身結束後,實現盈利

分析:1.一開始遇到這個題的時候,我首先想到的是dfs,在遍歷的過程中如果遇到環的話進行判斷,得出結果。但是這樣考慮是不正確的。比如:

a 1.0 b

b 1.0 c

b 5.0 d

c 0.1 d

d 1.0 a

dfs時,如果先搜abcda是不成功的,如果這時標記搜過的d為捨棄,則abda就搜不到了。

2.放棄dfs後,發現這裡的思路跟尋找負權迴路很相似,尋找負權迴路是因為在執行過程中可以不斷更新,而這裡如果存在盈利的話,也可以不斷更新。

使用bellman-ford,必須保證圖中每個點為起始點都沒有迴路。而使用spfa,只要看入佇列次數就行

**:bellman-ford

view code

1 #include 2 #include 3 #include 4

#define white 0

5#define black 1

6using

namespace

std;7//

192k 32ms 8//

bellman-ford910

const

int maxp=31;11

const

int maxe=1000;12

struct

edge

13edge[maxe];

1819 typedef struct

20pp;

25pp point[maxp];

26int

p,e;

27bool

flag;

2829

void bellman_ford(int

u)3049}

50if(!f)

51break;52

}53for(i=1;i<=p;i++)

54for(j=point[i].pre;j!=-1;j=edge[j].next)

55if(point[edge[j].v].valueedge[j].w)

5660 flag=true;61

}6263struct

mode

64mode[maxp];

6869

int find_point(char

str)

7076

77int

main()

7894

95 scanf("

%d",&e);

96int index=1;97

for(i=1;i<=e;i++)

98108

109 flag=true

;110

for(i=1;i<=p;i++)

111117

118119

if(!flag)

120 printf("

case %d: yes\n

",k);

121else

122 printf("

case %d: no\n

",k);

123}

124return0;

125}

126127

/*128

3129

usdollar

130britishpound

131frenchfranc

1323

133usdollar 0.5 britishpound

134britishpound 10.0 frenchfranc

135frenchfranc 0.21 usdollar

136137

3138

usdollar

139britishpound

140frenchfranc

1416

142usdollar 0.5 britishpound

143usdollar 4.9 frenchfranc

144britishpound 10.0 frenchfranc

145britishpound 1.99 usdollar

146frenchfranc 0.09 britishpound

147frenchfranc 0.19 usdollar

148149

0150

*/

spfa

view code

1 #include 2 #include 3 #include 4 #include 5

#define white 0

6#define black 1

7using

namespace

std;8//

204k 32ms910

const

int maxp=31;11

const

int maxe=1000;12

struct

edge

13edge[maxe];

1819 typedef struct

20pp;

25pp point[maxp];

26int

p,e;

27bool

flag;

28int

cnt[maxp];

2930

struct

mode

31mode[maxp];

3536

int find_point(char

str)

3743

44void spfa(int

u)4575}

76}77}

78}79}

8081

intmain()

8298

99 scanf("

%d",&e);

100int index=1

;101

for(i=1;i<=e;i++)

102112

113 flag=true

;114 spfa(1

);115

116if(!flag)

117 printf("

case %d: yes\n

",k);

118else

119 printf("

case %d: no\n

",k);

120}

121return0;

122}

123/*

1243

125usdollar

126britishpound

127frenchfranc

1283

129usdollar 0.5 britishpound

130britishpound 10.0 frenchfranc

131frenchfranc 0.21 usdollar

132133

3134

usdollar

135britishpound

136frenchfranc

1376

138usdollar 0.5 britishpound

139usdollar 4.9 frenchfranc

140britishpound 10.0 frenchfranc

141britishpound 1.99 usdollar

142frenchfranc 0.09 britishpound

143frenchfranc 0.19 usdollar

144145

0146

*/

這個題還可以用floyd做,因為沒有確定的源點,最終求出arrray[i][i],如果大於初始值1,則yes,否則no

tjuoj 1129

POJ 3259 SPFA判斷負權迴路

spfa 是bellman ford的一種優化 spfa 用於求負權存在的最短路,判斷是否有負權迴路,只需判斷鬆弛邊的次數,如果大於n,就說明存在負權迴路 include include include include include include define n 5501 using name...

poj2393(類似dp的區間貪心)

translation 奶牛們建了一家酸奶廠,在n週內每週需要出貨y i單位酸奶,第i周成本為c i,儲存費為每週y。求總體最低成本。solution 區間貪心 說是貪心,其實感覺有點類似dp,不過這二者本來就是一種則優策略的演算法,也就無所謂了。對於某一周,可以在當周生產新的酸奶,也可以從前幾周選...

棋盤問題 POJ 1321 類似(八皇后)

在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。input 輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,用乙個空格隔開,表示了將...