[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条边,而作为国王,他十分喜欢游览自己的国家.他一般 会从任意一个点出发,随便找边 ...
随机推荐
- OpenCV: 图像连通域检测的递归算法
序言:清除链接边缘,可以使用数组进行递归运算; 连通域检测的递归算法是定义级别的检测算法,且是无优化和无语义失误的. 同样可用于寻找连通域 void ClearEdge(CvMat* MM,CvPoi ...
- Python学习①. 基础语法
Python 简介 Python 是一种解释型,面向对象的语言.特点是语法简单,可跨平台 Python 基础语法 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编 ...
- webpack学习(二)
时下很火的react项目多用到webpack+ES6,本文只实践webpack的打包功能,不涉及react. 1.新建项目 新建的项目,命令模式下切换到项目根路径,用npm init命令生成packa ...
- 【转载】Java 反射详解
目录 1.什么是反射? 2.反射能做什么? 3.反射的具体实现 4.根据反射获取父类属性 4.反射总结 反射反射,程序员的快乐! 1.什么是反射? Java反射就是在运行状态中,对于任意一个类,都能够 ...
- PAT_A1076#Forwards on Weibo
Source: PAT A1076 Forwards on Weibo (30 分) Description: Weibo is known as the Chinese version of Twi ...
- ldap 禁止匿名登录(5)
[root@zabbix1 ~]# cat disable_anon.ldif dn: cn=config changetype: modify add: olcDisallows olcDisall ...
- 32.es读请示内部分发原理
当客户端发送一次读请求时,大致会经过以下几个步骤 1.客户端发送一个请求过去,es的一个node接收到这个请求(随机的node),这个node就被es内部分配成coordinating node(协调 ...
- 使用VirtualBox实现端口转发,以SSH与Django为例
先来认识几个概念 (1)IP地址:又称为互联网协议地址,是计算机的物理地址,相当于计算机的编号,是32位的二进制数,通常被分割成4个8位的二进制数: (2)端口:指设备与外界通讯的接口,一台计算机的端 ...
- QT5的模块介绍【摘】
Qt 5 模块分为 Essentials Modules 和 Add-on Modules 两部分.前者是基础模块,在所有平台上都可用:后者是扩展模块,建立在基础模块的基础之上,在能够运行 Qt 的平 ...
- Spring MVC学习总结(2)——Spring MVC常用注解说明
使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02 之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使 ...