一二三型观测线的图片_拓扑图

一二三型观测线的图片_拓扑图“您的个人假期”旅行社组织了一次比荷卢经济联盟的巴士之旅。比荷卢经济联盟有很多公交线路。每天公共汽车都会从一座城市开往另一座城市。沿途汽车可能会在一些城市(零或更多)停靠。旅行社计划旅途从 S 城市出发,到 F 城市结束。由于不同旅客的景点偏好不同,所以为了迎合更多旅客,旅行社将为客户提供多种不同线路。游客可以选择的行进路线有所限制,要么满足所选路线总路程为 S 到 F 的最小路程,要么满足所选路线总路程仅比最小路程多一个单位长度。如上图所示,如果 S=1,F=5,则这里有两条最短路线 1→

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

“您的个人假期”旅行社组织了一次比荷卢经济联盟的巴士之旅。

比荷卢经济联盟有很多公交线路。

每天公共汽车都会从一座城市开往另一座城市。

沿途汽车可能会在一些城市(零或更多)停靠。

旅行社计划旅途从 S 城市出发,到 F 城市结束。

由于不同旅客的景点偏好不同,所以为了迎合更多旅客,旅行社将为客户提供多种不同线路。

游客可以选择的行进路线有所限制,要么满足所选路线总路程为 S 到 F 的最小路程,要么满足所选路线总路程仅比最小路程多一个单位长度。

在这里插入图片描述

如上图所示,如果 S=1,F=5,则这里有两条最短路线 1→2→5,1→3→5,长度为 6;有一条比最短路程多一个单位长度的路线 1→3→4→5,长度为 7。

现在给定比荷卢经济联盟的公交路线图以及两个城市 S 和 F,请你求出旅行社最多可以为旅客提供多少种不同的满足限制条件的线路。

输入格式
第一行包含整数 T,表示共有 T 组测试数据。

每组数据第一行包含两个整数 N 和 M,分别表示总城市数量和道路数量。

接下来 M 行,每行包含三个整数 A,B,L,表示有一条线路从城市 A 通往城市 B,长度为 L。

需注意,线路是 单向的,存在从 A 到 B 的线路不代表一定存在从 B 到 A 的线路,另外从城市 A 到城市 B 可能存在多个不同的线路。

接下来一行,包含两个整数 S 和 F,数据保证 S 和 F 不同,并且 S、F 之间至少存在一条线路。

输出格式
每组数据输出一个结果,每个结果占一行。

数据保证结果不超过 109。

数据范围
2≤N≤1000,
1≤M≤10000,
1≤L≤1000,
1≤A,B,S,F≤N

输入样例:
2
5 8
1 2 3
1 3 2
1 4 5
2 3 1
2 5 3
3 4 2
3 5 4
4 5 3
1 5
5 6
2 3 1
3 2 1
3 1 10
4 5 2
5 2 7
5 2 7
4 1
输出样例:
3
2

题解
最短路拓扑图

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 1e3 + 10;
const int M = 2e4 + 10;
struct Ver{ 
   
    int id,type,dist;
    bool operator > ( const Ver &w)const{ 
   
        return dist > w.dist;
    }
};
int head[N],c;
struct Edge{ 
   
    int v,w,next;
}edge[M];
void add(int u,int v,int w){ 
   
    edge[c].v = v;
    edge[c].w = w;
    edge[c].next = head[u];
    head[u] = c ++;
}
int vis[N][2],dist[N][2],cnt[N][2];
int dijstra(int s,int e){ 
   
    priority_queue<Ver,vector<Ver>,greater<Ver> >q;
    memset(dist,INF,sizeof dist);
    memset(cnt,0,sizeof cnt);
    memset(vis,0,sizeof vis);
    dist[s][0] = 0;
    cnt[s][0] = 1;
    q.push({ 
   s,0,dist[s][0]});
    while(!q.empty()){ 
   
        Ver t = q.top();
        q.pop();
        int type = t.type,id = t.id,d = t.dist;
        if(vis[id][type])continue;
        vis[id][type] = true;
        for(int i = head[id];~i;i = edge[i].next){ 
   
            int v = edge[i].v,w = edge[i].w;
            if(dist[v][0] > d + w){ 
   
                dist[v][1] = dist[v][0],cnt[v][1] = cnt[v][0];
                dist[v][0] = d + w,cnt[v][0] = cnt[id][type];
                q.push({ 
   v,0,dist[v][0]});
                q.push({ 
   v,1,dist[v][1]});
            }
            else if(dist[v][0] == d + w)cnt[v][0] += cnt[id][type];
            else if(d + w < dist[v][1])dist[v][1] = d + w,cnt[v][1] = cnt[id][type],q.push({ 
   v,1,dist[v][1]});
            else if(d + w == dist[v][1])cnt[v][1] += cnt[id][type];
        }
    }
    if(dist[e][1] == dist[e][0] + 1)return cnt[e][1] + cnt[e][0];
    return cnt[e][0];
}
int main(){ 
   
    int T;
    cin>>T;
    while(T --){ 
   
        int n,m;
        int s,e;
        cin>>n>>m;
        int x,y,w;
        memset(head,-1,sizeof head);
        c = 0;
        for(int i = 0;i < m;i ++){ 
   
            cin>>x>>y>>w;
            add(x,y,w);
        }
        cin>>s>>e;
        cout<<dijstra(s,e)<<endl;
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168630.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言求素数的方法_用c语言求1~n的素数个数

    C语言求素数的方法_用c语言求1~n的素数个数一、判断n是否能被2~n-1整除输入的数n不能被2-(n-1)整除,说明是素数输入的数n能被2-(n-1)整除,说明不是素数注意:1不是素数,素数是指大于1的自然数,除了1和该数自身外,无法被其他自然数整除的数。法一:#include<stdio.h>int main(){ int i, n; printf(“请输入一个数:”); scanf(…

    2022年8月18日
    5
  • 转:ATI显卡的机器上安装Linux花屏解决办法

    转:ATI显卡的机器上安装Linux花屏解决办法

    2021年9月5日
    53
  • vue(20)生命周期函数「建议收藏」

    vue(20)生命周期函数「建议收藏」生命周期函数生命周期函数代表的是Vue实例,或者是Vue组件,在网页中各个生命阶段所执行的函数。生命周期函数可以分为创建阶段和运行期间以及销毁期间。其中创建期间的函数有beforeCreate、c

    2022年8月7日
    6
  • php代码检测工具_php代码在线运行

    php代码检测工具_php代码在线运行https://segmentfault.com/q/1010000000119048

    2022年9月28日
    3
  • 工具:数据库设计ER图

    工具:数据库设计ER图一、简介我们在做数据库设计的时候经常需要系统性的去认识系统涉及到的全部对象,以及对象间的相互关系,如果系统复杂的话,如果不借助合适工具的话,到最后设计出来的数据库肯定会存在或多或少的问题,不过前辈们早就遇到过这类问题,并提供了具体的解决方案,那就是本文要讲的ER图(EntityRelationshipDiagram),ER图提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。就…

    2022年6月21日
    29
  • pl sql develop_sql中declare是什么意思

    pl sql develop_sql中declare是什么意思因为SQL只能访问、操作数据库,却不能进行程序设计,而OraclePL/SQL是一种高级数据库程序设计语言,该语言专门用于对ORACLE数据库进行访问,并且可以进行过程处理。*注:在PL/SQL中只能用SQL语句中的DML部分,不能用DDL部分,如果要在PL/SQL中使用DDL(如CREATEtable等)的话,只能以动态的方式来使用。**1.DML(datamanipulationlanguage)数据操纵语言:比如SELECT、UPDATE、INSERT、DELETE

    2022年10月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号