#include<bits/stdc++.h>
#define MAX 2147483647
using namespace std;
struct ndoe
{
int length,cost;
} a[550][550];
int v,e,v_start,v_end;
void creat()
{
for(int i=0; i<v; i++)
for(int j=0; j<v; j++)
if(i!=j)
a[i][j].length=a[i][j].cost=MAX;
for(int j=0; j<e; j++)
{
int v1,v2,length1,cost1;
scanf("%d%d%d%d",&v1,&v2,&length1,&cost1);
a[v1][v2].length=a[v2][v1].length=length1;
a[v1][v2].cost=a[v2][v1].cost=cost1;
}
}
void fl()
{
for(int i=0; i<v; i++)
for(int j=0; j<v; j++)
for(int k=0; k<v; k++)
if(a[k][j].length>a[k][i].length+a[i][j].length)
{
a[k][j].length=a[k][i].length+a[i][j].length;
a[k][j].cost=a[k][i].cost+a[i][j].cost;
}
else if(a[k][j].length==a[k][i].length+a[i][j].length)
if(a[k][j].cost>a[k][i].cost+a[i][j].cost)
a[k][j].cost=a[k][i].cost+a[i][j].cost;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d",&v,&e,&v_start,&v_end);
creat();
fl();
printf("%d %d\n",a[v_start][v_end].length,a[v_start][v_end].cost);
}
}
SDUT3363数据结构实验之图论七:驴友计划
最新推荐文章于 2020-12-03 20:42:11 发布