时间限制:1s 内存限制:128MB
题目描述
n个节点m条边,每条边都有长度d和花费p,给出起点S和终点T,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
输入
输入n,m,点的编号是1~n,然后m行,每行4个数。a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行为两个数,S,T,S为起点,T为终点。n和m为0时输入结束。(1 < n <= 1000,0 < m < 100000,S != T)
输出
输出一行有两个数:最短距离及其花费。
样例输入
3 2
1 2 5 6
2 3 4 5
1 3
0 0
样例输出
9 11
代码
#include <iostream>
#include <vector>
using namespace std;
struct E { //邻接链表元素结构体
int next;
int c;
int cost;
};
vector<E> edge[1001]; //邻接链表
int Dis[1001]; //距离数组
int cost[1001]; //花费数组
bool mark[1001]; //是否属于集合k数组
int main() {
i