/*
写了个傻逼二分套二分,真的傻逼了,我这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. 微信菜单加emoji图标

    1.https://icomoon.io/app/#/select----------------选择图标后进入 2. 笑脸表情可选择更多图标,左侧e901,是“字体码” 3.将图片复制件自定义菜单编 ...

  2. MarkDown不支持图片放缩。。

    ![](http://images2015.cnblogs.com/blog/573995/201604/573995-20160430162211050-1357272526.jpg =100x20 ...

  3. FEC之我见二

    前面简单说了一下FEC,以及它的配合使用的方法.下面我想详细说一下FEC算法: 曾经有位大神在帖子里这么写着:采用改进型的vandermonde矩阵RS算法.其优点算法运算复杂度更低且解决了利用矩阵构 ...

  4. ACM学习历程—ZOJ 3777 Problem Arrangement(递推 && 状压)

    Description The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem sett ...

  5. bzoj 2084: Antisymmetry 回文自动机

    题目: Description 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作"反对称"字符串.比如00001111和010101就是反对称的 ...

  6. [转]Google开源Leak Finder—用于检测内存泄漏的JavaScript工具-----可惜,暂时打不开google的网站,下载不了

    近日,Google开源了Leak Finder,这款工具可以查看JavaScript应用的堆,进而发现内存泄漏. 作为一门垃圾收集语言,JavaScript并不会出现常见的内存泄露情况,特别是像C++ ...

  7. 洛谷【P1009】阶乘之和

    题目传送门:https://www.luogu.org/problemnew/show/P1009 高精度加法:https://www.cnblogs.com/AKMer/p/9722610.html ...

  8. Poj 1504 Adding Reversed Numbers(用字符串反转数字)

    一.题目大意 反转两个数字并相加,所得结果崽反转.反转规则:如果数字后面有0则反转后前面不留0. 二.题解 反转操作利用new StringBuffer(s).reverse().toString() ...

  9. windows服务和进程的区别和联系

    Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出. 任何的用户消息通常都是记录在Windows 事件日志里.Windows Serv ...

  10. cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客

    cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客 Cadence Allegro16.5详细安装具体的步骤 1.下载SPB16.5下来后,点setup.exe,先安装第一项 ...