PAT-A 1003. Emergency (25)
2017-08-22 08:50
447 查看
注意点:
一个单源最短路算法,需要考虑两个条件,最短路和最多队伍,有优先级。用spfa。
代码:
一个单源最短路算法,需要考虑两个条件,最短路和最多队伍,有优先级。用spfa。
代码:
#include <iostream> #define max_Int 1<<30 using namespace std; struct Road{ int d; int l; }; struct Line{ int p; int l; int t; }; int main() { int n, m, c1, c2; int team[500]; struct Road road[501][501]; struct Line line[100000]; int con[500]; int left, right; int i, j, i1, i2, i3, i4; int num, ans, minl; cin >> n >> m >> c1 >> c2; for (i = 0; i < n; i++) { cin >> team[i]; road[i][0].d = 0; con[i] = max_Int; } for (i = 0; i < m; i++) { cin >> i1 >> i2 >> i3; road[i1][0].d++; i4 = road[i1][0].d; road[i1][i4].d = i2; road[i1][i4].l = i3; road[i2][0].d++; i4 = road[i2][0].d; road[i2][i4].d = i1; road[i2][i4].l = i3; } left = 0; right = 0; con[c1] = 0; line[0].p = c1; line[0].l = 0; line[0].t = team[c1]; while (left <= right) { if (line[left].l > con[line[left].p]) { left++; continue; } for (i = 1; i <= road[line[left].p][0].d; i++) { if (line[left].l + road[line[left].p][i].l > con[road[line[left].p][i].d]) { continue; } else { con[road[line[left].p][i].d] = line[left].l + road[line[left].p][i].l; right++; line[right].p = road[line[left].p][i].d; line[right].l = con[road[line[left].p][i].d]; line[right].t = line[left].t + team[road[line[left].p][i].d]; } } left++; } minl = con[c2]; ans = 0; num = 0; for (i = 0; i <= right; i++) { if (line[i].p == c2 && line[i].l == minl) { num++; if (line[i].t > ans) ans = line[i].t; } } cout << num << " " << ans << endl; return 0; }
相关文章推荐
- PAT:1003. Emergency (25)
- PAT (Advanced Level) Practise 1003. Emergency (25) Dijstra扩展应用
- PAT 1003. Emergency (25)
- PAT - 甲级 - 1003. Emergency (25)(Dijkstra)
- PAT 解题报告 1003. Emergency (25)
- PAT(甲)1003. Emergency(25)
- pat 1003. Emergency (25)
- PAT 1003. Emergency (25)
- [PAT]1003. Emergency (25)
- PAT 甲级 1003. Emergency (25)
- PAT 1003. Emergency (25)
- PAT(甲)1003. Emergency(25)
- PAT (Advanced Level) 1003. Emergency (25)
- PAT Advanced Level 1003. Emergency (25)(Java and C++)
- pat 1003. Emergency (25)
- PAT(甲)1003. Emergency(25)
- PAT甲级1003. Emergency (25)
- 编程题目:PAT(Advanced Level) Practice 1003. Emergency (25)
- PAT TEST甲级1003. Emergency (25)
- PAT甲级-1003. Emergency (25)多条最短路