当前位置: 首页 > news >正文

PTAxt的考研路

xt是我院19级专业第一,但他认为保研并不能展示他全部的实力,所以他在22年初试一结束就加入了23考研的队伍中,并且他为了填补我院近些年来无北大研究生的空白,毅然决然决定扛起19级的大旗,在学校百年华诞之际献上他最诚挚的礼物。

iShot2022-03-18 13.17.29.png

xt每天都游走在寝室,食堂和图书馆,三点一线,即便是在疫情局势蔓延的形势下,凌晨三点半刚做完核酸,他六点半还是照常起来卷。现在他太忙了,好像在提前准备复试了,想让你帮个小忙,xt会给出学校的地图(有向图),并且给出寝室,食堂和图书馆的编号(编号从0开始),希望你从该图中找出一个子图,要使得在这个子图中,寝室能够到达图书馆,食堂也能到达图书馆,同时希望在这个子图中的所有边的边权之和最小。如果你找不到任何一个子图符合要求的话(),输出“xt,我好没本领!”,因为你找不到并不代表xt找不到

子图的定义:

从原图中删去一些点或删去一些线或既删去一些点又删去一些线,剩下的部分(当然必须仍然是图)。允许两种极端情况:什么都不删;删去所有点和所有线。

输入格式:

第一行输入点的个数 n,3 <= n <= 105,边的个数 m,0 <= m <= 2∗105

第二行给出寝室的编号id1,食堂的编号id2,图书馆的编号id3,题目保证三个编号两两不同。

随后 m 行按照以下形式描述边,表示有一条有向边,起点是from,终点是to,权值是w

from to w

0 <= from, to <= n - 1,from != to,1 <= w <= 109

输出格式1:

如果子图存在则输出最小边权和,如果不存在输出“xt,我好没本领!”

输入样例1:

6 9
0 1 5
0 2 2 
0 5 6 
1 0 3 
1 4 5 
2 1 1 
2 3 3 
2 3 4 
3 4 2 
4 5 1

输出样例1:

9

解释:

上图为输入的图。

蓝色边为最优子图之一。

注意,直接选择0 1 5三点构成的子图也能得到最优解,但无法在满足所有限制的前提下,得到更优解。

输入样例2:

3 2
0 1 2
0 1 1
2 1 1

输出样例2:

xt,我好没本领!

解释:

上图为输入的图。

可以看到,不存在从节点 1 到节点 2 的路径,所以不存在任何子图满足所有限制。

题目大意:

求寝室和食堂到图书馆的最短路。

思路:

跑三遍dijkstra,分别从寝室和食堂跑一边正向路,从图书馆跑一边反向路。

#include<bits/stdc++.h>
using namespace std;
typedef int ll;
#define endl "\n"
#define P pair<ll,ll>const ll N = 1e5+7 ,M = 2e5+7 ,MAX = 0x3f3f3f3f3f3f3f3f/3;
ll n,m,now,nowf;//now为正向head初始点,nowf为反向head初始点
ll head[2][N],value[3][N],ne[2][M],e[2][M],v[2][M];//0记录反向路,1记录正向路 void add(ll x ,ll y ,ll z ,bool f){//用f判断路的方向 if(f)e[1][now] = y ,ne[1][now] = head[1][x] ,v[1][now] = z ,head[1][x] = now++;else e[0][nowf]= y ,ne[0][nowf]= head[0][x] ,v[0][nowf]= z ,head[0][x] = nowf++;
}void dj(ll x ,ll y ,ll z){priority_queue<P,vector<P>,greater<P> >q;q.push({0,x});value[y][x]=0;while(!q.empty()){ll op = q.top().second;q.pop();for(ll i = head[z][op] ; ~i ; i = ne[z][i]){ll to = e[z][i] ,va = v[z][i];if(value[y][to] > value[y][op] + va){value[y][to] = value[y][op] + va;q.push({value[y][to],to});}}}return;
}void solve(){memset(head,-1,sizeof head);memset(value,MAX,sizeof value);ll x,y,z,id1,id2,id3,mx=MAX;now=0,nowf=0;cin >> n >> m >> id1 >> id2 >> id3;while(m--){cin >> x >> y >> z;add(x,y,z,1),add(y,x,z,0);}dj(id1,1,1),dj(id2,2,1),dj(id3,0,0);for(ll i = 0 ; i < n ; i ++)mx = min(mx , value[0][i] + value[2][i] + value[1][i]);mx < MAX ? cout << mx << endl : cout << "xt,我好没本领!"<< endl;return;
}int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);ll t=1;//cin >> t;while(t --)solve();return 0;
}

 

相关文章:

  • Python爬虫学习完整版
  • Rust 实战练习 - 4. 网络 TCP/UDP/Channel
  • 两台电脑简单的通信过程详解(经过两个路由器,不同网段)
  • Vue js封装接口
  • Mybatis-01
  • 51单片机学习笔记10 IIC通讯和EEPROM
  • 2024/3/23 蓝桥杯
  • 洁盟、苏泊尔、希亦超声波清洗机哪家好?全方位实测对比谁更强
  • 网络七层模型:理解网络通信的架构(〇)
  • Spring 面试——restcontroller/requestmapping
  • git新建一个项目如何合并其他项目
  • 异步引入组件
  • 机器学习 - 神经网络分类
  • 【牛客】SQL146 0级用户高难度试卷的平均用时和平均得分
  • HashMap---数据结构
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 11111111
  • download使用浅析
  • ECMAScript入门(七)--Module语法
  • JS基础之数据类型、对象、原型、原型链、继承
  • Laravel 中的一个后期静态绑定
  • magento 货币换算
  • Making An Indicator With Pure CSS
  • python学习笔记 - ThreadLocal
  • STAR法则
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • TCP拥塞控制
  • uva 10370 Above Average
  • Yii源码解读-服务定位器(Service Locator)
  • 初识 beanstalkd
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 移动端唤起键盘时取消position:fixed定位
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​iOS实时查看App运行日志
  • ​LeetCode解法汇总518. 零钱兑换 II
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (bean配置类的注解开发)学习Spring的第十三天
  • (NSDate) 时间 (time )比较
  • (TOJ2804)Even? Odd?
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (七)Knockout 创建自定义绑定
  • .Net 8.0 新的变化
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET/C# 的字符串暂存池
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .net6使用Sejil可视化日志
  • .net中我喜欢的两种验证码
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ 数据结构 - C++] AVL树原理及实现
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [AIGC] 使用Curl进行网络请求的常见用法