#include<iostream>
#include<queue>
using namespace std;
int s,t,n,m,last[505],d[505],cnt,d1[505];
struct edge{
int v,w,c,next;
}e[250005];
void add(int u,int v,int w,int c)
{
e[++cnt].v=v;
e[cnt].w=w;
e[cnt].c=c;
e[cnt].next=last[u];
last[u]=cnt;
}
struct heapnode{
int u,d;
bool operator<(const heapnode & a)const{
return d>a.d;}
};
priority_queue<heapnode>q;
void dijkstra()
{
for(int i=0;i<=n;i++)
d1[i]=d[i]=0x3f3f3f;
d1[s]=d[s]=0;
q.push((heapnode){s,0});
while(!q.empty())
{
heapnode x=q.top();q.pop();
int u=x.u;
if(d[u]!=x.d) continue;
if(u==t) break;
for(int i=last[u];i;i=e[i].next)
{
int v=e[i].v;
if(d[v]==d[u]+e[i].w&&d1[v]>d1[u]+e[i].c)
d1[v]=d1[u]+e[i].c;
if(d[v]>d[u]+e[i].w){
d[v]=d[u]+e[i].w;
d1[v]=d1[u]+e[i].c;
q.push((heapnode){v,d[v]});
}
}
}
}
int main()
{
cin>>n>>m>>s>>t;
for(int i=1,u,v,w,c;i<=m;i++)
{
cin>>u>>v>>w>>c;
add(u,v,w,c);
add(v,u,w,c);
}
dijkstra();
cout<<d[t]<<' '<<d1[t];
}
7-8 旅游规划
最新推荐文章于 2024-11-07 23:16:04 发布