UVA11374機場快線題目學習

2021-06-21 00:58:59 字數 1752 閱讀 9491

學習《演算法競賽入門經典訓練指南》

思考:機場快線

1.對起點和終點呼叫dijkstra

2.列舉所有的商業線(包含沒有使用商業線車票),計算從起點到a,a->b,b->終點,並與最小做對比

(考慮到所有線路都是雙向的,需要比較兩次)

3.列印出訪問順序給出經過的車站。

可能需要用到路徑尋找函式find

對於函式find,因為所有點到目標點之間的最短路已經求出

首先求出起始點到目標點之間的距離d[i]

如果有點j使得最短路d[j]+weight(j,i)=d[i],那麼j必然是前乙個點

使用find列舉求出點j,得到邊j->i

**:

// uva11374 airport express

// rujia liu

#include#include#include#includeusing namespace std;

const int inf = 1000000000;

const int maxn = 500 + 10;

struct edge ;

struct heapnode

};struct dijkstra

void addedge(int from, int to, int dist) );

m = edges.size();

g[from].push_back(m-1);

} void dijkstra(int s) );

while(!q.empty()) );}}

}} // dist[i]為s到i的距離,paths[i]為s到i的最短路徑(經過的結點列表,包括s和t)

void getshortestpaths(int s, int* dist, vector* paths)

reverse(paths[i].begin(), paths[i].end());

}}};

題目相關

dijkstra solver;

int d1[maxn], d2[maxn];

vectorpaths1[maxn], paths2[maxn];

int main()

solver.getshortestpaths(s, d1, paths1); // s到所有點的距離和路徑

solver.getshortestpaths(e, d2, paths2); // t到所有點的距離和路徑

int ans = d1[e]; // 初始解解為直達距離

vectorpath = paths1[e]; // 初始解的station序列

int midpoint = -1; // 不坐商業線

scanf("%d", &k);

for(int i = 0; i < k; i++)

swap(x, y);}}

if(kase != 0) printf("\n");

kase++;

for(int i = 0; i < path.size()-1; i++) printf("%d ", path[i]+1);

printf("%d\n", e+1);

if(midpoint == -1) printf("ticket not used\n"); else printf("%d\n", midpoint+1);

printf("%d\n", ans);

} return 0;

}

1137 矩陣乘法

1137 矩陣乘法 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出2個n n的矩陣m1和m2,輸出2個矩陣相乘後的結果。input 第1行 1個數n,表示矩陣的大小 2 n 100 第2 n 1行,每行n個數,對應m1的1行 0 m1 i 1000 第n 2 2n ...

Wikioi P1137 計算係數

題目描述 description 給定乙個多項式 ax by k,請求出多項式展開後x n y m項的係數。輸入描述 input description 共一行,包含 5 個整數,分別為a,b,k,n,m,每兩個整數之間用乙個空格隔開。輸出描述 output description 輸出共 1 行,...

CODEVS 1137 計算係數

題目描述 description 給定乙個多項式 ax by k,請求出多項式展開後x n y m項的係數。輸入描述 input description 共一行,包含 5 個整數,分別為a,b,k,n,m,每兩個整數之間用乙個空格隔開。輸出描述 output description 輸出共 1 行,...