洛谷P1841重要的城市

2022-04-05 21:33:52 字數 1178 閱讀 2704

重要城市有三個性質如下:

1.重要城市能對其他兩個不同城市的最短路徑做出貢獻

2.重要城市具有唯一性,如果兩不同城市之間的最短路徑有兩種中間城市情況,那麼這兩個中間城市可以彼此代替,就都不能成為重要城市

3.重要城市具有替代性,對於兩不同城市間的一種最短路徑情況,該路徑上所有中間城市皆為重要城市;如果出現了一種更優最短路徑情況,先前路徑上所有中間城市皆非重要城市,更優解者是。

跑floyd,並記錄兩點間的乙個重要的城市。

如果兩個點的距離更新,則重要的城市也更新。

如果兩個點的距離在計算時出現與原來結果相等時,就說明可能出現多條最短路,這時刪掉重要的城市。

最後列舉兩個點,把它們之間的重要的城市去重後記錄下來,排序輸出即可。

由於在floyd中,對於每個中點,其他點對都進行過考慮,因此答案是不會出現遺漏的。

#include #include #include #include #include #include #include #define re register

using namespace std;

const int maxn = 205;

const int maxm = 200005;

inline int read()

while(ch >= '0' && ch <= '9')

return x * f;

}int n,m,u,v,w;

int dis[maxn][maxn],imp[maxn][maxn];

bool vis[maxn];

int ans[maxm],cnt;

inline void floyd()

else if(dis[i][j] == dis[i][k] + dis[k][j])

}}int main()

floyd();

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(imp[i][j] > 0 && !vis[imp[i][j]])

if(cnt == 0)

sort(ans + 1 , ans + 1 + cnt);

for(int i=1;i<=cnt;i++) printf("%d ",ans[i]);

return 0;

}

洛谷 1841 JSOI2007 重要的城市

部落格觀賞效果更佳 給你乙個聯通的無向簡單圖,請你求出有多少個點滿足 刪除之後,存在兩點最短路增長了。點數 200 200 2 00。這個在某種程度上告訴了你這題用什麼演算法 博主注 一邊f lo yd floyd floy d一遍記錄即珂。恕我直言,這簡直是剛學flo yd floyd floy ...

洛谷P6688 可重集

給出乙個長度為 n 的非負整數序列 a 1,a 2,a 3,ldots,a n 給出 q 次操作,每次先給出乙個引數 op 本質相同的定義 令區間長度為 text 序列 p dots p 為 a dots a 公升序排序後的結果,序列 q dots q text 為 a dots a 公升序排序後的...

洛谷 P1272 重建道路

題目描述 一場可怕的 後,人們用n個牲口棚 1 n 150,編號1.n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p ...