洛谷 1841 JSOI2007 重要的城市

2021-10-01 04:08:13 字數 1783 閱讀 2560

部落格觀賞效果更佳

給你乙個聯通的無向簡單圖,請你求出有多少個點滿足:刪除之後,存在兩點最短路增長了。

點數<

=200

<=200

<=2

00。(這個在某種程度上告訴了你這題用什麼演算法——博主注)

一邊f lo

yd

floyd

floy

d一遍記錄即珂。恕我直言,這簡直是剛學flo

yd

floyd

floy

d就會做的水題

設k ey

[i][

j]

key[i][j]

key[i]

[j]表示從i

ii到j

jj的路徑上的乙個關鍵斷點(就是會讓最短路邊長的斷點)。

先用k ,i

,j

k,i,j

k,i,

j的順序列舉,做乙個正常的flo

yd

floyd

floyd。

(用m pmp

mp矩陣記錄圖)

如果m p[

i][k

]+mp

[k][

j]

[i][

j]

mp[i][k]+mp[k][j]mp

[i][

k]+m

p[k]

[j][i][

j],說明k

kk就是斷點。

如果m p[

i][k

]+mp

[k][

j]==

mp[i

][j]

mp[i][k]+mp[k][j]==mp[i][j]

mp[i][

k]+m

p[k]

[j]=

=mp[

i][j

],說明最短路不唯一,即:沒有斷點。

然後把所有的key

[i][

j]

key[i][j]

key[i]

[j]排序去重輸出即可。由於值域很小,我們採用雞排(雞數排序)實現這一步排序去重,賊jbjb

jb好寫。沒什麼好注意的,sbsb

sb題乙個(然後我還調了好久,請問:我是什麼

上面那個問題的答案:我是蒟蒻

**:

#include

using

namespace std;

namespace flandre_scarlet

}int key[n]

[n];

bool cxk[n]

;//怕不是這個陣列名讓我中了邪

void

soviet()

else

if(mp[i]

[k]+mp[k]

[j]==mp[i]

[j])

//就是上面那個轉移}f

(i,1

,n)f

(j,1

,n)bool flag=0;

f(i,

1,n)}if

(flag)

putchar

('\n');

else

puts

("no important cities.");

}#define flan void

flan ismywife()

}int

main()

洛谷P1841重要的城市

重要城市有三個性質如下 1.重要城市能對其他兩個不同城市的最短路徑做出貢獻 2.重要城市具有唯一性,如果兩不同城市之間的最短路徑有兩種中間城市情況,那麼這兩個中間城市可以彼此代替,就都不能成為重要城市 3.重要城市具有替代性,對於兩不同城市間的一種最短路徑情況,該路徑上所有中間城市皆為重要城市 如果...

洛谷P4049 JSOI2007 合金

某公司加工一種由鐵 鋁 錫組成的合金。他們的工作很簡單。首先進口一些鐵鋁錫合金原材料,不同種類的原材料中鐵鋁錫的比重不同。然後,將每種原材料取出一定量,經過融解 混合,得到新的合金。新的合金的鐵鋁錫比重為使用者所需要的比重。現在,使用者給出了 n 種他們需要的合金,以及每種合金中鐵鋁錫的比重。公司希...

洛谷P4049 JSOI2007 合金 題解

題目鏈結 首先,材料的前兩個屬性可以唯一確定乙個材料,合金的前兩個樹形也可以唯一確定乙個材料。那麼材料和合金都可以被看成平面上的點 a i,b i 或 d i,e i 不難發現,一些材料能表示出一種合金當且僅當這個合金 在平面上的點 在選取的材料 在平面上的點 組成的凸包內。不難發現,選取的點凸包上...