Vijos 1082 最短路

点击打开链接

题意:中文

思路:直接跑两遍最短路,然后将所有可以用的边全部找出来,然后在跑一遍最短路求出最短时间即可

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=5010;
const int maxm=40010;
struct edge{
    int to,cost_ti,cost_len;
    edge(int a,int b,int c){to=a;cost_ti=b;cost_len=c;}
};
typedef pairP;
vectorG[maxn];
int dis1[maxn],dis2[maxn];
void dijkstra(int s,int *dis){
    priority_queue,greater

>que; fill(dis,dis+maxn,inf); dis[s]=0;que.push(P(0,s)); while(!que.empty()){ P p=que.top();que.pop(); int v=p.second; if(dis[v]dis[v]+e.cost_ti){ dis[e.to]=dis[v]+e.cost_ti; que.push(P(dis[e.to],e.to)); } } } } struct edge1{ int to,cost_len; edge1(int a,int c){to=a;cost_len=c;} }; typedef pairP; vectorGG[maxn]; int dis[maxn]; void dijkstra1(int s){ priority_queue,greater

>que; fill(dis,dis+maxn,inf); dis[s]=0;que.push(P(0,s)); while(!que.empty()){ P p=que.top();que.pop(); int v=p.second; if(dis[v]dis[v]+e.cost_len){ dis[e.to]=dis[v]+e.cost_len; que.push(P(dis[e.to],e.to)); } } } } int U[maxm],V[maxm],C[maxm],D[maxm]; int main(){ int n,m,st,en,k; while(scanf("%d%d",&n,&m)!=-1){ for(int i=0;i


你可能感兴趣的:(ACM,最短路,图论,最短路)