在嘟嘟生活的王國有 n 座城市,某些城市之間有傳輸電能的線路。在某條線路傳輸電能是會有損耗的,某乙個城市在某一時間只可以向另外乙個城市傳輸電能。已知在城市 s 存在 m 千瓦時電能,求將這些電能都傳輸到城市 t ,至少需要損耗多少電能。
輸入包含多組測試資料,對於每組測試資料:
第一行包含乙個整數 n ( 0 < n ≤ 50000 ) 。
接下來輸入包含 n 部分,對於第 i ( 1 ≤ i ≤ n )部分:第一行包含乙個整數 num ( num ≤ 50 ) ,表示城市 i 可以向 num 個城市傳輸電能;接下來 num 行每行包含兩個整數 x y ( 1 ≤ x ≤ n ; x != i ; 0 ≤ y ≤ 100 ) ,表示城市 i 可以向城市 x 傳輸電能,在傳輸時將會損失 y% 的電能。
最後一行包含三個整數 s t m ( 1 ≤ s,t ≤ n ; 1 ≤ m ≤ 1000000 ) 。
對於每組測試資料,如果城市 s 不能向城市 t 傳輸電能,則輸出 "impossible!" ;否則輸出乙個小數,表示損失電能的最小量,結果保留兩位小數。
522 20
3 40
23 90
4 50
22 40
4 90
15 80
01 5 1000
920.00這是一道最短路問題,用dis[i]存s到t的最小損失,再用乙個陣列把傳送到每個地點的電能存下來,以便計算下乙個的損失,然後跑一遍最短路就行了。
dijkstra:
#include #include #define n 50000
const double inf = 99999999;
int vis[n + 10], f[n + 10], n, cnt;
double dis[n + 10], arr[n + 10], minn;
struct edge e[n * 50 + 10];
void add(int u, int v, int w)
; f[u] = cnt;
}void dijkstra(int s, int m)}}
}int main()
for (int i = 1; i <= n; i++)
}scanf("%d%d%d", &s, &t, &m);
dijkstra(s, m);
if (dis[t] < inf)
printf("%.2f\n", dis[t]);
else printf("impossible!\n");
}return 0;
}
dijkstra佇列優化:
#include #include #include #include #define n 50000
using namespace std;
typedef pair pii;
const double inf = 99999999;
int vis[n + 10], f[n + 10], n, cnt;
double dis[n + 10], arr[n + 10], minn;
struct edge e[n * 50 + 10];
void add(int u, int v, int w)
; f[u] = cnt;
}void dijkstra(int s, int m)}}
}int main()
for (int i = 1; i <= n; i++)
}scanf("%d%d%d", &s, &t, &m);
dijkstra(s, m);
if (dis[t] < inf)
printf("%.2f\n", dis[t]);
else printf("impossible!\n");
}return 0;
}
spfa:
#include #include #include #include #define n 50000
using namespace std;
const double inf = 99999999;
int vis[n + 10], f[n + 10], n, cnt;
double dis[n + 10], arr[n + 10], minn;
struct edge e[n * 50 + 10];
void add(int u, int v, int w)
; f[u] = cnt;
}void spfa(int s, int m)}}
}}int main()
for (int i = 1; i <= n; i++)
}scanf("%d%d%d", &s, &t, &m);
spfa(s, m);
if (dis[t] < inf)
printf("%.2f\n", dis[t]);
else printf("impossible!\n");
}return 0;
}
計蒜客 熱愛工作的蒜蒜(最短路)
題目鏈結 time limit 1000ms memory limit 262144k 眾所周知,蒜蒜是一名熱愛工作的好員工,他覺得時間就是金錢,做事情總是爭分奪秒。這天晚上,蒜蒜乙個人去吃晚飯。不巧的是,吃完飯以後就開始下雨了,蒜蒜並沒有帶雨傘出來。但是蒜蒜熱愛工作,工作使他快樂,他要盡快趕回去寫...
計蒜客 最短路習題 聖誕樹
許久未更新,今天做到一道有意思的題目,先上圖,然後細說 這道題大體意思是給定一張無向圖,其邊權為正,要你求出總代價最小的生成樹,生成樹上 每條邊 v e 的代價為 w e s j w e 為邊 i,j 的權值,s j 是 對於 j 節點所在子樹的節點 數總和。題解 該題看起來是最小生成樹的題目,實際...
計蒜客 18018 熱愛工作的蒜蒜 最短路 dp
蒜蒜要從1 n,中間有地下的路和地上的路,地下的路長度都為1,且不會被淋,地上的路長度有權值,問從1 n在距離不超過l的情況下,使得淋雨的路程最少 定義dp i j 表示在走了j條地下的路的情況下從1到i的最短路,然後就是最短路了 只不過push的時候還要記下j的值 31 struct node 3...