拯救小tim

【问题描述】
小tim在游乐场,有一天终于逃了出来!但是不小心又被游乐场的工作人员发现了。。。 所以你的任务是安全地把小tim护送回家。
但是,A市复杂的交通状况给你除了一个难题。
A市一共有n个路口,m条单行马路。但是,每条马路都只有一段时间是开放的。为了 安全,你必须选择一条护送路线,使得小
tim在路上的时间最短,即到家的时刻减去离开游
乐场的时刻最短。
【样例解释】
最优方案应该是,在1号点停留至时刻1,然后走到3号点,然后走到4号点。到达时 刻为时刻4。在路上的时间为4-1=3。

【输入格式】

第一行4个数,分别是n,m,s,t(2<=n<=100;0<=m<=1000;1<=s,t<=n,s≠t)。基地在路口s,码头在路口t。
接下来m行每行5个数x,y,b,e,c 表示一条x路口到y路口的单行线,在b时刻到e时刻之间开放,需要c的时间通过这条路
(必须保证行进在路中间时,路一直开放,否则小tim会被捉住)。两个路口之间可能会有多条道路。一开始的时刻是0(当然
,你可以不用马上出发,在基地多呆一段时间)。
如果不存在任何一种方案使得小tim能成功到达码头,输出“Impossible”。

【输出格式】
一行,为小tim在路上停留的最短时间

Sample Input
4 5 1 4
1 2 0 1 1
1 2 0 1 2
1 3 1 3 2
2 4 3 4 1
3 4 3 4 1
Sample Output
3

解题思路:
一道非常巧妙的SPFA题目。我们可以按照时间点进行SPFA。
1.首先,如果到了当前节点而当前的路还没有开放,那就应该按照开放的时间点向下走,如果开放了而晚到了,那就按晚到的时间,所以应该取max。
2.按照出发的时间点进行spfa,取最早的出发点和最晚的出发点进行SPFA。
3.SPFA时,点能进入队列有两个条件:1.在道路关闭之前到达。2.时间最短。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
queue<int>q;
struct node{
    int from,to,l,r,ds;
}list[1005];
int minn,k,maxx=-1e9,n,m,s,t,x,y,l,r,c,ans;
int head[1005],dis[1005],v[1005];
void add(int x,int y,int l,int r,int c){
    list[++k].from=head[x];
    list[k].to=y;
    list[k].l=l;
    list[k].r=r;
    list[k].ds=c;
    head[x]=k;
}
void spfa(int x){
    memset(dis,127/3,sizeof(dis));
    memset(v,0,sizeof(v));
    q.push(s);dis[s]=x;v[s]=1;
    while(!q.empty()){
        int u=q.front();q.pop();v[u]=0;
        for (int i=head[u];i;i=list[i].from){

        if (max(dis[u],list[i].l)+list[i].ds<=list[i].r)
        if (max(dis[u],list[i].l)+list[i].ds<dis[list[i].to]){
            dis[list[i].to]=max(dis[u],list[i].l)+list[i].ds;
            if (!v[list[i].to]){
                v[list[i].to]=1;
                q.push(list[i].to);
            }
        }
    }
}
}
int main(){
    cin>>n>>m>>s>>t;
    ans=minn=1e9;
    for (int i=1;i<=m;i++){
        scanf("%d%d%d%d%d",&x,&y,&l,&r,&c);
        if (l>r) swap(l,r);
        if (l+c>r) continue;
        if (x==s){
            minn=min(minn,l);
            maxx=max(maxx,r-c);
        }
        add(x,y,l,r,c);
    }
    for (int i=minn;i<=maxx;i++){
        spfa(i);
        if (dis[t]==dis[0]) break;//优化,如果某一时刻到达不了,那后来的也就到达不了了。
        ans=min(ans,dis[t]-dis[s]);
    }
    if (ans==1e9) cout<<"impossible";
    else 
    cout<<ans;
    return 0;
}
标题基于Python的汽车之家网站舆情分析系统研究AI更换标题第1章引言阐述汽车之家网站舆情分析的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义说明汽车之家网站舆情分析对汽车行业及消费者的重要性。1.2国内外研究现状概述国内外在汽车舆情分析领域的研究进展与成果。1.3论文方法及创新点介绍本文采用的研究方法及相较于前人的创新之处。第2章相关理论总结和评述舆情分析、Python编程及网络爬虫相关理论。2.1舆情分析理论阐述舆情分析的基本概念、流程及关键技术。2.2Python编程基础介绍Python语言特点及其在数据分析中的应用。2.3网络爬虫技术说明网络爬虫的原理及在舆情数据收集中的应用。第3章系统设计详细描述基于Python的汽车之家网站舆情分析系统的设计方案。3.1系统架构设计给出系统的整体架构,包括数据收集、处理、分析及展示模块。3.2数据收集模块设计介绍如何利用网络爬虫技术收集汽车之家网站的舆情数据。3.3数据处理与分析模块设计阐述数据处理流程及舆情分析算法的选择与实现。第4章系统实现与测试介绍系统的实现过程及测试方法,确保系统稳定可靠。4.1系统实现环境列出系统实现所需的软件、硬件环境及开发工具。4.2系统实现过程详细描述系统各模块的实现步骤及代码实现细节。4.3系统测试方法介绍系统测试的方法、测试用例及测试结果分析。第5章研究结果与分析呈现系统运行结果,分析舆情数据,提出见解。5.1舆情数据可视化展示通过图表等形式展示舆情数据的分布、趋势等特征。5.2舆情分析结果解读对舆情分析结果进行解读,提出对汽车行业的见解。5.3对比方法分析将本系统与其他舆情分析系统进行对比,分析优劣。第6章结论与展望总结研究成果,提出未来研究方向。6.1研究结论概括本文的主要研究成果及对汽车之家网站舆情分析的贡献。6.2展望指出系统存在的不足及未来改进方向,展望舆情
由于没有直接相关的引用内容,以下是一般情况下在Mpx框架开发的小程序中使用TIM(即时通讯)的常见方法: ### 安装TIM SDK 在项目根目录下,使用npm或yarn安装TIM SDK。以npm为例: ```bash npm install tim-js-sdk ``` ### 引入并初始化TIM 在需要使用TIM的页面或模块中引入并初始化TIM: ```javascript import TIM from 'tim-js-sdk'; // 创建TIM实例 const tim = TIM.create({ SDKAppID: 你的SDKAppID }); // 监听事件 tim.on(TIM.EVENT.MESSAGE_RECEIVED, function(event) { // 处理接收到的消息 console.log('收到消息', event.data); }); // 登录 tim.login({ userID: 'yourUserID', userSig: 'yourUserSig' }).then(function(imResponse) { console.log('登录成功', imResponse); }).catch(function(imError) { console.warn('登录失败', imError); }); ``` ### 发送消息 在需要发送消息的地方调用相应的方法: ```javascript // 创建消息实例 const message = tim.createTextMessage({ to: 'targetUserID', conversationType: TIM.TYPES.CONV_C2C, payload: { text: 'Hello, TIM!' } }); // 发送消息 tim.sendMessage(message).then(function(imResponse) { console.log('消息发送成功', imResponse); }).catch(function(imError) { console.warn('消息发送失败', imError); }); ``` ### 监听连接状态 ```javascript tim.on(TIM.EVENT.KICKED_OUT, function(event) { console.log('被踢下线', event); }); tim.on(TIM.EVENT.SDK_READY, function(event) { console.log('SDK 已准备好', event); }); ``` ### 退出登录 ```javascript tim.logout().then(function(imResponse) { console.log('退出登录成功', imResponse); }).catch(function(imError) { console.warn('退出登录失败', imError); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值