/*
写了个傻逼二分套二分,真的傻逼了,我这tmd是在贪心呐,70分满满的人品
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 50010
using namespace std;
int head[maxn],num,n,m,mx1,mx2,mid1,mid2,ans=0x7fffffff;
bool vis[maxn],ok[];
struct node{int to,pre,v1,v2;}e[];
struct Node{int from,to,v1,v2;}edge[];
void Insert(int from,int to,int v1,int v2){
e[++num].to=to;
e[num].v1=v1;
e[num].v2=v2;
e[num].pre=head[from];
head[from]=num;
}
void bfs(){
queue<int>q;
q.push();vis[]=;
while(!q.empty()){
int now=q.front();q.pop();
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(!vis[to]){vis[to]=;q.push(to);}
}
}
}
bool check1(){
memset(vis,,sizeof(vis));
memset(ok,,sizeof(ok));
memset(head,,sizeof(head));num=;
for(int i=;i<=m;i++){
if(edge[i].v1>mid1)continue;
Insert(edge[i].from,edge[i].to,edge[i].v1,edge[i].v2);
Insert(edge[i].to,edge[i].from,edge[i].v1,edge[i].v2);
ok[i]=;
}
bfs();
return vis[n];
}
bool check2(){
memset(vis,,sizeof(vis));
memset(head,,sizeof(head));num=;
for(int i=;i<=m;i++){
if((edge[i].v2>mid2)||(!ok[i]))continue;
Insert(edge[i].from,edge[i].to,edge[i].v1,edge[i].v2);
Insert(edge[i].to,edge[i].from,edge[i].v1,edge[i].v2);
}
bfs();
return vis[n];
}
int main(){
freopen("magicalforest11.in","r",stdin);//freopen("magicalforest.out","w",stdout);
scanf("%d%d",&n,&m);
int x,y,z,c;
for(int i=;i<=m;i++){
scanf("%d%d%d%d",&x,&y,&z,&c);
edge[i].from=x;edge[i].to=y;edge[i].v1=z;edge[i].v2=c;
Insert(x,y,z,c);Insert(y,x,z,c);
mx1=max(mx1,z);
mx2=max(mx2,c);
}
bfs();
if(!vis[n]){puts("-1");return ;}
int l1=,r1=mx1;
while(l1<=r1){
mid1=(l1+r1)>>;
if(check1()){
int l2=,r2=mx2;
while(l2<=r2){
mid2=(l2+r2)>>;
if(check2())r2=mid2-,ans=min(ans,mid1+mid2);
else l2=mid2+;
}
r1=mid1-;
}
else l1=mid1+;
}
printf("%d",ans);
return ;
}

cogs 1685 魔法森林的更多相关文章

  1. 【BZOJ3669】[Noi2014]魔法森林 LCT

    终于不是裸的LCT了...然而一开始一眼看上去这是kruskal..不对,题目要求1->n的路径上的每个点的两个最大权值和最小,这样便可以用LCT来维护一个最小生成路(瞎编的...),先以a为关 ...

  2. BZOJ 3669 【NOI2014】 魔法森林

    Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...

  3. BZOJ-3669 魔法森林 Link-Cut-Tree

    意识到背模版的重要性了,记住了原理和操作,然后手打模版残了..颓我时间...... 3669: [Noi2014]魔法森林 Time Limit: 30 Sec Memory Limit: 512 M ...

  4. 【BZOJ】3669: [Noi2014]魔法森林(lct+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3669 首先看到题目应该可以得到我们要最小化 min{ max{a(u, v)} + max{b(u, ...

  5. NOI2014 魔法森林

    3669: [Noi2014]魔法森林 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 106  Solved: 62[Submit][Status] ...

  6. bzoj 3669: [Noi2014]魔法森林 动态树

    3669: [Noi2014]魔法森林 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 363  Solved: 202[Submit][Status] ...

  7. 图论 BZOJ 3669 [Noi2014]魔法森林

    Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...

  8. BZOJ 3669: [Noi2014]魔法森林( LCT )

    排序搞掉一维, 然后就用LCT维护加边MST. O(NlogN) ------------------------------------------------------------------- ...

  9. bzoj 3669: [Noi2014] 魔法森林 LCT版

    Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...

随机推荐

  1. 十一 Django框架,Session

    Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 1.数据库(默认)2.缓存3.文件4.缓存+数据库5.加密cookie 1.数据库Session,保存在数据库 ...

  2. Using SMOTEBoost(过采样) and RUSBoost(使用聚类+集成学习) to deal with class imbalance

    Using SMOTEBoost and RUSBoost to deal with class imbalance from:https://aitopics.org/doc/news:1B9F7A ...

  3. 11 Python 文件操作

    文件操作基本流程 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知 ...

  4. 使用common-dbutils进行dao操作

    jar: 先引出database工具类: package cn.itcast.utils; public class Stu { private int id; private String snam ...

  5. android sqlite,大数据处理、同时读写

    1. 批量写入,采用事物方式,先缓存数据,再批量写入数据,极大提高了速度 288条,直接inset  into  耗时7秒 8640条,     批量写入  耗时5-7秒 try { this.myD ...

  6. Python语言及其应用 第2章

  7. Agc017_D Game on Tree

    传送门 题目大意 给定一棵树,$1$号节点为根,两个人轮流操作,每次选择一个根节点外的点,删掉它以及它的子树,不能操作者输,求两人均采用最优策略下先手胜利还是后手胜利. 题解 经典问题树上删边游戏,根 ...

  8. Operating System-进程/线程内部通信-竞争条件(Race Conditions)

    从本文开始介绍进程间的通信,进程间通信遇到的问题以及方式其实和线程之间通信是一致的,所以进程间通信的所有理论知识都可以用在线程上,接下来的系列文章都会以进程之间的通信为模版进行介绍,本文主要内容: 进 ...

  9. 最长递增子序列(LIS)

    最长递增子序列(Longest Increasing Subsequence) ,我们简记为 LIS. 题:求一个一维数组arr[i]中的最长递增子序列的长度,如在序列1,-1,2,-3,4,-5,6 ...

  10. 测试-Swagger:目录

    ylbtech-测试-Swagger:目录 1.返回顶部 1. https://swagger.io/ 2.Swagger Editor http://swagger.io/swagger-edito ...