部落格觀賞效果更佳
給你乙個聯通的無向簡單圖,請你求出有多少個點滿足:刪除之後,存在兩點最短路增長了。
點數<
=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 不難發現,一些材料能表示出一種合金當且僅當這個合金 在平面上的點 在選取的材料 在平面上的點 組成的凸包內。不難發現,選取的點凸包上...