百度之星2023年第一场初赛 OJ1.公园

思路:BFS

有点费脑子,首先你需要想到,我们其实不能走这两个起点的最短路径,而是需要走一个两者共同走过的路。

我们可以轻松解决其距离问题,但是对于这个共同路径我们需要怎么找呢?

答案是,找路径的共同遍历点。也就是两个人走过的那个点。那要怎么找呢?枚举就行了。(核心)

那么,既然找到了中间的公共点,其实就直接找以各个点作为公共点然后总计消耗为多少就可以了,可以逆向思维,终点到共同点这一条路径是两人共同走的路径,也就是两人的消耗之和减去能够减少的能耗。两人到公共点的距离其实就是两个人到达这里的消耗之和,就全部加起来就是总消耗了,就这样枚举出最小值就可以。

注意:这里为什么需要BFS三遍,是因为第一遍需要确认起点到终点有没有路径;

第二遍第三遍其实就是为了后面找终点,两个起点共同经过的公共点才这样的,times参数表示访问次数。如代码所见,访问次数为3的时候才能说是公共点,也就是终点出发经过的点,两个起点出发都经过的点。

#include<bits/stdc++.h> 

using namespace std;
vector<int>g[40010];
int visit[40010];
int disn[40010];
int disf[40010];
int dist[40010];
int te,fe,s,t,f,n,m;
void bfs(int start,int times,int a[]){
    queue<int>q;
    a[start]=0;
    visit[start]++;
    q.push(start);
    while(!q.empty()){
        int tmp=q.front();
        q.pop();
        for(auto&cao:g[tmp]){
            if(visit[cao]==times)continue;

            a[cao]=a[tmp]+1;
            visit[cao]++;
            q.push(cao);
        }
    }
}
int main( )
{
    cin>>te>>fe>>s;
    cin>>t>>f>>n>>m;
    while(m--){
        int x,y;
        cin>>x>>y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    bfs(n,1,disn);//首先进行终点遍历操作,这一定是第一个操作,用来判断能不能到达两个起点。
    if(!visit[t]||!visit[f]){
        cout<<-1;
        return 0;
    }
    int res=INT_MAX;
    bfs(t,2,dist);
    bfs(f,3,disf);
    for(int i=1;i<=n;i++){
        if(visit[i]==3){
            res=min(res,dist[i]*te+disf[i]*fe+disn[i]*(te+fe-s));
        }
    }
    cout<<res;
    return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
hustoj.iso 是一个软件系统镜像文件。Hustoj是一个开源的在线评测系统,它被广泛应用于大学和高中的程序设计教学中。该系统的目标是提供一个方便使用的在线评测和训练环境,使学生能够提交他们的程序代码,并获得即时的评测结果。 hustoj.iso 是Hustoj的系统镜像文件,可以用来部署Hustoj系统。通过将hustoj.iso 文件安装到服务器上,就可以建立一个运行Hustoj系统的评测服务器。用户可以通过web界面访问该服务器,并提交自己的程序代码进行评测。 hustoj.iso 是一个基于Ubuntu操作系统的镜像文件。它集成了所有Hustoj系统所需要的软件和依赖项,并进行了预配置,使得安装和部署变得更加简单。用户只需要将hustoj.iso文件写入到U盘或光盘中,然后引导服务器从U盘或光盘启动,就可以开始安装Hustoj系统了。 使用hustoj.iso 部署Hustoj系统,可以为学生提供一个良好的在线评测环境,帮助他们进行程序设计的学习和训练。学生可以在该系统中提交自己的程序代码,并获得详尽的评测结果,包括运行时间、内存消耗、错误信息等等。同时,Hustoj还具有包括代码分享、竞赛组织等其他功能,能够满足不同需求的学生。 总之,hustoj.iso 是一个用于部署Hustoj系统的镜像文件,通过安装hustoj.iso,可以搭建一个功能完善、易用的在线评测环境,为程序设计学习提供有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值