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