bzoj1774 過路費 floyd 排序

2022-05-31 07:42:09 字數 1230 閱讀 6651

題意:n個點,m條雙向邊,每個點有權值c[i],每條邊有權值a[i].d,一條路徑的費用=每條邊的權值和+各個點的權值的最大值,即sigma(a[i].d)+max(c[i])。q個詢問,問x到y的最小費用。n<=250,m<=10000.

題解:

1

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

210 }

點按ci排序,k迴圈按點從小到達迴圈,floyd的三重迴圈中,k限定了當前任意的i到j的最短路徑都是由1~k所更新的,也就是i到j的路徑中不經過c[x]>c[k]的點。所以我們可以知道當前更新dis[i][j]的dis[i][k]和dis[k][j]這兩條路徑中點權的最大值分別是什麼。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10

using

namespace

std;

1112

const

int n=300,inf=(int

)1e9;

13int

n,m,q;

14int

w[n],dis[n][n];

15struct

nodep[n];

1819

int minn(int x,int y)

20int maxx(int x,int y)

21bool cmp(node x,node y)

2223

void

floyd()

2434}35

}3637int

main()

3849 sort(p+1,p+1+n,cmp);

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

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

5256

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

5762

floyd();

63//

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

64//

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

65//

printf("dis %d %d = %d\n",i,j,dis[i][j]);

66for(int i=1;i<=q;i++)

6771

return0;

72 }

過路費 (最短路)

問題描述 有一天你來到了乙個奇怪的國家,它有 n 個城市,城市之間有若干條雙向道路連線,每條道路都有一定的費用,經過城市也要一定的費用。從乙個城市到達另乙個城市的總花費為路徑上費用最大的城市費用 包括起點和終點 加上路徑上所有的道路的費用。給出 q 次詢問,分別回答每次詢問中兩城市間的最少花費。保證...

過路費Cow Toll Paths 思路

從草地1到草地3的道路的 邊過路費 為3,草地2的 點過路費 為5。要從草地1走到草地4,可以從草地1走到草地3再走到草地5最後抵達草地4。如果這麼走的話,需要的 邊過路費 為2 1 1 4,需要的點過路費為4 草地5的點過路費最大 所以總的花費為4 4 8。而從草地2到草地3的最佳路徑是從草地2出...

過路費 C組模擬賽

題目大意 給出乙個圖,每個點都有點權,每條邊都有邊權,k次詢問使得x到y的 邊權 最大點權 最小 解題思路 資料比較小,floyd就可以過 然後稍稍變形就可以了 源程式 include include include define min a,b ab a c?a c b define inf 1e...