[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条边,而作为国王,他十分喜欢游览自己的国家.他一般 会从任意一个点出发,随便找边 ...
随机推荐
- JNDI连接池连接Oracle数据库
今天做了一个评论的小功能,要求用JNDI连接池连接Oracle数据库,以前只是测试了是否连接的上,现在没想到一个JNDI连接池连接Oracle数据库,纠结了好久,原来都是Oracle数据库的问题,这是 ...
- Java中final,finally和finalize区别
Day11_SHJavaTraing_4-18-2017 Java中final,finally和finalize区别 1.final—修饰符(关键字) ①final修饰类,表示该类不可被继承 ②fin ...
- ROS:ubuntu-Ros使用OrbSLAM
一般无误的官方连接:https://github.com/raulmur/ORB_SLAM ubuntu16.04没有多少改变,还是使用kinetic老代替indigo Related Publica ...
- 实现Android-JNI本地C++调试
1. 原文链接:NDK单步调试方法 如有问题或者版权要求,请拜访原作者或者通知本人. 最近为了性能需求,开始搞JNI,白手起搞真心不容易.中间差点崩溃了好几次,最终总算得到一点心得. JN ...
- brew 安装的.net 运行时提示"Did you mean to run dotnet SDK commands?"
原因未知,但有解决方案 使用 brew cask 安装的.NET Core brew cask install dotnet 结果运行时出现: 解决方案: 下载官方 .pkg 文件安装,顺便卸载掉 b ...
- 02 java学习安装jdk及其环境配置
SUN公司1995年正式推出的一款语言 其实之前,Sun公司1991年,James Gosling等人就开始开发Oak语言,希望用于控制嵌入有效电视交换盒,1994年更名为Java,之前来自 与jav ...
- 在Unity中json文件的解析方式
using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using ...
- 【剑指Offer】51、构建乘积数组
题目描述: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1]. 其中B中的元素B[i]=A[0] * A[1]... * A[i-1] * A[i+1] ...
- [MySQL优化案例]系列 — RAND()优化
众所周知,在MySQL中,如果直接 ORDER BY RAND() 的话,效率非常差,因为会多次执行.事实上,如果等值查询也是用 RAND() 的话也如此,我们先来看看下面这几个SQL的不同执行计划和 ...
- 数据结构总结(UPDATING......)
目标: 1.栈........√ 2.队列......√ 3.堆.........× 4.并查集...× 栈: #define MAXN 65536 struct stack{ int sz[MAXN ...