[XJOI]noip45 T2 图
***图***

解题思路:这题的原题似乎好像是NOI某年的题目,然后数据改水了
于是就可以用一些简单的最短路算法水掉.
因为他是要求max(a)+max(b)的值,所以单纯的最短路是不行的
我们可以枚举最大的a值,即能走的边a值要小于这个限制,然后对b跑一遍最短路,每次更新答案
当然这是我的辣鸡做法,只能满足这道题的数据,更优越的算法是用lct来维护
读者可以去各大OJ做 魔法森林这道题
https://www.luogu.org/problem/show?pid=2387 在此只贴了luogu的网址
%:pragma GCC optimize()
#include<bits/stdc++.h>
using namespace std;
const int N=;
int to[N],fst[N],nxt[N],fa[N],t[N];
long long dis[N],a[N],b[N],ans=1e13;
int x,y,aa,bb,tot=,n,m;
bool vis[N];
inline void add(int x,int y,int aa,int bb){
to[++tot]=y; nxt[tot]=fst[x]; fst[x]=tot; a[tot]=aa; b[tot]=bb;
}
inline int ask(int x){
if (fa[x]==x) return x; fa[x]=ask(fa[x]); return fa[x];
}
struct cmp{bool operator ()(int a,int b){return dis[a]>dis[b];}};
priority_queue <int,vector<int>,cmp> q;
inline void dij(int lim){
for (int i=;i<=n;++i) dis[i]=1e13;
memset(vis,,sizeof(vis));
dis[]=; q.push();
while (!q.empty()){
int t=q.top(); q.pop();
if (vis[t]) continue; vis[t]=;
for (int i=fst[t];i;i=nxt[i])
if (a[i]<=lim&&dis[to[i]]>max(dis[t],b[i]))
dis[to[i]]=max(dis[t],b[i]),q.push(to[i]);
}
} int main(){
scanf("%d%d",&n,&m);
for (int i=;i<=n;++i) fa[i]=i;
for (int i=;i<=m;++i){
scanf("%d %d %d %d",&x,&y,&aa,&bb);
add(x,y,aa,bb); add(y,x,aa,bb); fa[ask(x)]=ask(y);
}
if (ask(fa[])!=ask(fa[n])){
printf("-1"); return ;
}
for (int i=;i<=tot;++i){
dij(a[i]); ans=min(ans,a[i]+dis[n]);
}
if (ans>=1e13) printf("-1");
else printf("%lld\n",ans);
}
总结:这道题其实也可以从最小生成树的思路考虑,一题多解,
这题作为提高组还是比较适宜的,想要练习最短路的同学,可以练练
当然更厉害的,也可以想想更优越的算法
[XJOI]noip45 T2 图的更多相关文章
- [XJOI]noip43 T2多人背包
多人背包 DD 和好朋友们要去爬山啦!他们一共有 K 个人,每个人都会背一个包.这些包的容量是相同的,都是 V.可以装进背包里的一共有 N 种物品,每种物品都有给定的体积和价值.在 DD 看来,合理的 ...
- [XJOI]noip40 T2统计方案
统计方案 小B写了一个程序,随机生成了n个正整数,分别是a[1]..a[n],他取出了其中一些数,并把它们乘起来之后模p,得到了余数c.但是没过多久,小B就忘记他选了哪些数,他想把所有可能的取数方案都 ...
- 利用spm提供的MoAEpilot听觉数据学习预处理以及单被试glm分析与统计推断
1.数据介绍 下载:http://www.fil.ion.ucl.ac.uk/spm/data/auditory/ SUBJECT:1 VOLUME: 64*64*64 TR:7s total acq ...
- NOIP2018 前流水账
不务正业系列 学习yyb,zsy,ljq,mona等大佬而写的 \(qwq\) 不知道前言写些什么 \(qwq\) 尽量日更好吧 \(qwq\) \(upd:\)日更是不可能日更的,这辈子不可能的 \ ...
- zjoi2015d1题解
闲来无事做了丽洁姐姐的题 t1给一棵树 每个点有点权 每次修改点权 修改后询问每个点到树的带权重心的带权距离是多少 每个点度数不超过20 很显然的一个点分树... 我们记一下 每个点的子树中的所有点到 ...
- harukaの赛前日常
REMEMBER US. haruka是可爱的孩子. 如题,此博客用来记录我停课后的日常. Dear Diary 10.8 上午考试. T1,直接枚举每一个点最后一次被修改的情况.(100pts) T ...
- 国庆集训 Day1 T2 生成图 DP
国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...
- XJOI网上同步训练DAY2 T2
[问题描述] 火车司机出秦川跳蚤国王下江南共价大爷游长沙.每个周末勤劳的共价大爷都会开车游历长沙市. 长沙市的交通线路可以抽象成为一个
- [模拟赛] T2 混合图
Description Hzwer神犇最近又征服了一个国家,然后接下来却也遇见了一个难题. Hzwer的国家有n个点,m条边,而作为国王,他十分喜欢游览自己的国家.他一般 会从任意一个点出发,随便找边 ...
随机推荐
- 5、scala数组转换
1.使用yield和函数式编程转换数组 2.算法案例:移除第一个负数之后的所有负数 1.使用yield和函数式编程转换数组 使用yield进行数组转换 结合if守卫,仅转换需要转换的元素 使用函数式编 ...
- 12 Python+selenium对日期控件进行处理(采用执行JS脚本)
[环境信息] Python34+IE+windows2008 [说明] 1.对于日期控件,没有办法通过定位元素再直接传值的方式处理.可以采用执行JavaScript处理. PS:还要去学学js怎么写, ...
- [Advanced Algorithm] - Inventory Update
题目 依照一个存着新进货物的二维数组,更新存着现有库存(在 arr1 中)的二维数组. 如果货物已存在则更新数量 . 如果没有对应货物则把其加入到数组中,更新最新的数量. 返回当前的库存数组,且按货物 ...
- C# 带Cookies发送请求
#region --来自黄聪 void F1() { #region --创建cookies容器 添加Cookies和对应的URl(Hots主) CookieContainer cc = new Co ...
- vue货币格式化组件、局部过滤功能以及全局过滤功能
一.在这里介绍一个vue的时间格式化插件: moment 使用方法: .npm install moment --save. 2 定义时间格式化全局过滤器 在main.js中 导入组件 import ...
- [luogu4162 SCOI2009] 最长距离(最短路)
传送门 Solution 题目是最长路,其实是最短路ヽ(ー_ー)ノ 把进入障碍点的边设为1,其他为0.枚举每个点为起点找距离<=T的点,更新答案 Code //By Menteur_Hxy #i ...
- Linux放弃到入门
流星,因为短暂而美丽,划过黑寂的夜空,释放出那一闪而逝的光芒,虽然微弱,但却没有人能无视它的存在.人生如同流星,充满了精彩与传奇,如同一支美丽的传说,究竟能否想流星那样短暂,别人决定不了,上天也决定不 ...
- Linux系统学习之 二:新手必须掌握的Linux命令2
2018-10-03 22:20:48 一.文件目录管理命令 1.touch 命令 用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”. 参数: -a :仅修改“读取时间(at ...
- Flask中的session操作
一.配置SECRET_KEY 因为flask的session是通过加密之后放到了cookie中.所以有加密就有密钥用于解密,所以,只要用到了flask的session模块就一定要配置“SECRET_K ...
- ThinkPHP5.0 模型查询操作
1.获取单个数据 //取出主键为1的数据 $user = User::get(1); echo $user->name; // 使用数组查询 $user = User::get(['name' ...