***图***

解题思路:这题的原题似乎好像是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 图的更多相关文章

  1. [XJOI]noip43 T2多人背包

    多人背包 DD 和好朋友们要去爬山啦!他们一共有 K 个人,每个人都会背一个包.这些包的容量是相同的,都是 V.可以装进背包里的一共有 N 种物品,每种物品都有给定的体积和价值.在 DD 看来,合理的 ...

  2. [XJOI]noip40 T2统计方案

    统计方案 小B写了一个程序,随机生成了n个正整数,分别是a[1]..a[n],他取出了其中一些数,并把它们乘起来之后模p,得到了余数c.但是没过多久,小B就忘记他选了哪些数,他想把所有可能的取数方案都 ...

  3. 利用spm提供的MoAEpilot听觉数据学习预处理以及单被试glm分析与统计推断

    1.数据介绍 下载:http://www.fil.ion.ucl.ac.uk/spm/data/auditory/ SUBJECT:1 VOLUME: 64*64*64 TR:7s total acq ...

  4. NOIP2018 前流水账

    不务正业系列 学习yyb,zsy,ljq,mona等大佬而写的 \(qwq\) 不知道前言写些什么 \(qwq\) 尽量日更好吧 \(qwq\) \(upd:\)日更是不可能日更的,这辈子不可能的 \ ...

  5. zjoi2015d1题解

    闲来无事做了丽洁姐姐的题 t1给一棵树 每个点有点权 每次修改点权 修改后询问每个点到树的带权重心的带权距离是多少 每个点度数不超过20 很显然的一个点分树... 我们记一下 每个点的子树中的所有点到 ...

  6. harukaの赛前日常

    REMEMBER US. haruka是可爱的孩子. 如题,此博客用来记录我停课后的日常. Dear Diary 10.8 上午考试. T1,直接枚举每一个点最后一次被修改的情况.(100pts) T ...

  7. 国庆集训 Day1 T2 生成图 DP

    国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...

  8. XJOI网上同步训练DAY2 T2

    [问题描述] 火车司机出秦川跳蚤国王下江南共价大爷游长沙.每个周末勤劳的共价大爷都会开车游历长沙市. 长沙市的交通线路可以抽象成为一个

  9. [模拟赛] T2 混合图

    Description Hzwer神犇最近又征服了一个国家,然后接下来却也遇见了一个难题. Hzwer的国家有n个点,m条边,而作为国王,他十分喜欢游览自己的国家.他一般 会从任意一个点出发,随便找边 ...

随机推荐

  1. AI:IPPR的数学表示-CNN方法

    前言: 随着超量类别PR和高精度的需求,人工特征方法局限性凸显出来,固定的特征hash压缩映射因其压缩损失.表现为特定的特征hash方法,在海量的同类数据集上近邻特性变差,而在不同类别的数据上面隔离性 ...

  2. 微信小程序—picker(滚动选择器)

    官方api:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html 上边是官网的api.小程序中,底部下拉滚动选择主要有这几种 ...

  3. 数据清理,预处理 pandas dataframe 操作技巧 总结

    dsoft2 = data1.loc[(data1['程'] == "轻") | (data1['程'] == "中")]设置x下标plt.xticks(np. ...

  4. LINUX - getopts

    getopts optionString opt; optionString :所有参数组成的-参数串: opt:从optionString 每次取的参数值: 当optionString用[:]开头, ...

  5. marquee图片无缝拼接滚动

    marquee图片无缝滚动 先了解一下对象的几个的属性: innerHTML:     设置或获取位于对象起始和结束标签内的 HTML scrollHeight: 获取对象的滚动高度. scrollL ...

  6. css画圆

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  7. [luogu4251 SCOI2015] 小凸玩矩阵 (二分图最大匹配)

    传送门 Description Input Output 输出包含一行,为选出的 n 个数中第 k 大数的最小值. Sample Input 输入样例1: 2 3 1 1 2 4 2 4 1 输入样例 ...

  8. [CodeForces1059E] Split the Tree

    树形DP. 用倍增处理出来每个点往上能延伸出去的最远路径,nlogn 对于每个节点,如果它能被后代使用过的点覆盖,就直接覆盖,这个点就不使用,否则就ans++,让传的Max改成dp[x] #inclu ...

  9. vue_music:排行榜rank中top-list.vue中样式的实现:class

    排行榜的歌曲列表,根据排名渲染不同的样式,同时需要考虑分辨率的2x 3x图 不同的样式--:class 考虑分辨率的2x 3x图--需要在stylu中的mixin中bgImage根据屏幕分辨率选择图片 ...

  10. js获取数组中任意一项

    1.获取数组任一项 在一些实际应用场景中,会要求实现一个随机的需求,随机获取某一项,来展示出来,都知道要通过javaScript的Math.random()方法来实现,这里我在Array的原型上添加了 ...