DESCRIPTION

这个地区可以看作是一个无向图,N个点M条边组成。每个边有一个边权。我们定义一条路径的花费,就是这条路径上最大的边权。
现在有一条咸鱼,想从S走到T,徒步旅行。
咸鱼于是找到了你,想让你告诉他从S到T的最小花费。

INPUT
第一行两个整数,N,M。满足(1 <= N <= 10^5, 0 <= M <= 5*10^5)接下来M行,每行三个整数U,V,C。表示有一个连接U点和V点的边,且边权是C。(1<=C<=10^9)接下来一个行是两个整数S,T(1<=S,T<=n)
OUTPUT
输出答案,如果S不能到达T,输出-1
SAMPLE INPUT
5 5
1 2 1
2 3 1
3 4 1
4 5 1
5 1 1
1 3

SAMPLE OUTPUT
1
SOLUTION
玲珑杯”ACM比赛 Round #15
比赛的时候用最短路跑了一遍,没过,但是我辉神用最短路过了。。还是我辉神厉害,我呢,只能照着题解来了一波(最小生成树+bfs)。
首先考虑最小生成树,由于prim算法的本质是已经生成最小树的集合与没生成最小树的集合之间的最短边加入到生成树里去,所以无法从prim算法得到最小生成树的图,但是,kruskal不同,它是将所有的边从小到大选择,确定这条边,自然可以确定边的两点,所以,可以根据kruskal来获得最小生成树。
然后使用bfs算法,广搜一遍最小生成树,搜到终点t的时候再遍历s-t这条路,选出最大的即可。
然后现在要考虑,存储的最小生成树的数据结构,最小生成树最多有(n-1)条边,那么,使用链式的(vector)是最好的,这样bfs时最多遍历2*(n-1)次,自然不会超时,而如果使用矩阵的话,那就要遍历n*n次了,(被我注释那一段是超时的写法,我知道它会超时,就是想试一下效果怎样)。
最后就是遍历那条边,存储一条边最好的办法就是前缀数组,pre[u]代表的是u这个点的上一个点,在这里我是二维数组,用pre[u][1]存储边权,然后递归求最大值即可。
#include <iostream>
#include <stdio.h>
#include <string.h>
#define siz 100005
#define inf 0x3f3f3f3f3f3f
#include <vector>
#include <queue>
#include <algorithm>
#define LL long long
using namespace std;
int n,m,s,t;
struct qnode{LL v,c;qnode(LL _v=0,LL _c=0):v(_v),c(_c){}bool operator <(const qnode &r)const{return c<r.c;}
};
struct Edge{int u,v;int w;bool operator <(const Edge &r)const{return w<r.w;}//Edge(int _v,int _cost):v(_v),w(_cost){}
}E[5*siz];
//vector<int>vec;
//vector<Edge>E[5*siz];
int F[siz],tol,cnt;
vector<Edge>mst[siz];
void addedge(int u,int v,int w){E[tol].u=u;E[tol].v=v;E[tol].w=w;++tol;
}
bool vis[siz];
int pre[siz][2];
int findfa(int x){if(F[x]==x) return x;else return F[x]=findfa(F[x]);
}
void kruskal(int n){for(int i=1;i<=n;i++){F[i]=i;}sort(E,E+tol);//int cnt=0;for(int i=0;i<tol;i++){int u=E[i].u;int v=E[i].v;int w=E[i].w;int t1=findfa(u);int t2=findfa(v);if(t1!=t2){F[t1]=F[t2];Edge x;x.u=u;x.w=w;mst[v].push_back(x);x.u=v;mst[u].push_back(x);//mst[cnt].u=u;//mst[cnt].v=v;//mst[cnt++].w=w;}//if(cnt==n-1) break;}
}
void bfs(){queue<int>que;while(!que.empty())que.pop();que.push(s);vis[s]=1;memset(vis,false,sizeof(vis));bool flag=false;while(!que.empty()){int u=que.front();que.pop();if(u==t){flag=true;break;}vis[u]=true;for(int i=0;i<mst[u].size();i++){if(!vis[mst[u][i].u]){pre[mst[u][i].u][0]=u;pre[mst[u][i].u][1]=mst[u][i].w;que.push(mst[u][i].u);}}/*for(int i=0;i<cnt;i++){if(!vis[mst[i].v]&&mst[i].u==u){pre[mst[i].v][0]=u;pre[mst[i].v][1]=mst[i].w;que.push(mst[i].v);}else if(!vis[mst[i].u]&&mst[i].v==u){pre[mst[i].u][0]=u;pre[mst[i].u][1]=mst[i].w;que.push(mst[i].u);}}*/}if(!flag) cout<<-1<<endl;else{int maxx=-1;int u=t;while(u!=s){if(pre[u][1]>maxx) maxx=pre[u][1];u=pre[u][0];}cout<<maxx<<endl;}
}
int main()
{scanf("%d %d",&n,&m);int u,v,w;for(int i=0;i<m;i++){scanf("%d %d %d",&u,&v,&w);addedge(u,v,w);}scanf("%d %d",&s,&t);kruskal(n);bfs();return 0;
}
/*
6 6
1 2 2
2 3 3
3 4 4
3 5 2
1 5 5
2 4 3
1 5
*/

玲珑杯oj-1126咸鱼旅行相关推荐

  1. [unknown OJ] ZZH的旅行

    一.题目 点此看题 二.解法 设 d p [ i ] dp[i] dp[i] 为 i i i 点的最大有趣度,转移很显然啊: d p [ i ] = d p [ j ] + ( a [ i ] + d ...

  2. 2020年2月15日 考试【更新中】

    2020年2月15日 考试 又是一次不成功的考试,在很小的地方屡次摔跤,摔到心态失衡,这次考试就很难再翻身了.再被抬了两手的情况下才勉强AC了两道水题,而错误的原因却是最细微的地方没有考虑到.最后才自 ...

  3. 玲珑杯”ACM比赛 Round #15 D 咸鱼商店【二分+01背包】

    题目链接:http://www.ifrog.cc/acm/problem/1125 题目大意:中文题目,题意请仔细看题面. 解题思路:二分+01背包     01背包的最终结果与其中的顺序无关,我们要 ...

  4. “玲珑杯”线上赛 Round #15 河南专场 F 咸鱼文章

    elttiL moT nwod eht teerts sllac ruo god " ehT peek god " . piZ si a peehs god . tuB nehw ...

  5. 南阳OJ独木舟上的旅行

     /*独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别. 一条独木舟最多只能乘坐两个人 ...

  6. 独木舟上的旅行-OJ

    独木舟上的旅行 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘 ...

  7. c语言最大值和最小值1157,基于NBU OJ的C语言在线实验及习题汇编(计算机科学与技术21世纪高等学校规划教材)...

    导语 内容提要 陈叶芳主编的<基于NBU OJ的C语言在线实验及习题汇编>是为"C语言程序设计"课程编写的实验指导用书.全书以宁波大学程序设计在线评判系统(NBU OJ ...

  8. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  9. 投入OJ的怀抱~~~~~~~~~~

    OpenJudge C20182024 信箱(1) 账号 修改设定 退出小组 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61910 ...

最新文章

  1. java return用法_Java枚举的高级用法之多键值的映射使用
  2. Linux tee的花式用法和pee
  3. 作者:唐碧霞(1984-),女,中国科学院北京基因组研究所生命与健康大数据中心工程师...
  4. git 获取最新代码_程序员必知:这是一份全面 amp; 详细的 Git与Github 介绍指南
  5. 本周四直播预告(内含福利)丨 Oracle RAC集群安装部署
  6. 黑鲨游戏手机2 Pro外观设计曝光:或将新增两条LED灯带
  7. html 滚动条,菜鸟,ionic 滚动条
  8. linux下安装mongodb,以及解决安装报错问题
  9. vue(组件、路由)懒加载
  10. 【Java】Java与数字证书
  11. paip.AJAX回调函数不起作用的解决
  12. linux下编译C++文件基本命令
  13. 一起来作画吧「GitHub 热点速览 v.22.14」
  14. 计算机专业权威期刊投稿经验总结
  15. 解决笔记本WIFI共享网络给黑群晖
  16. 电视电脑盒子,一机两用,电视秒变电脑
  17. QT 如何去除QListView选中item后的虚线框
  18. html表单点击变色如何实现,表单特效 鼠标经过或选中input变色
  19. BZOJ 1226 [SDOI2009] 学校食堂Dining
  20. 比较SQL Server Always On Cluster Mirroring

热门文章

  1. OSN博士必须掌握的必杀技(更新至2017/12/15)
  2. 非静压模型SWASH学习(2)——潮汐波模拟算例(Tidal wave flow over an irregular bed)
  3. 管理知识的培训(1)
  4. Tengine sysguard模块
  5. python并发处理同一个文件_python并发编程(并发与并行,同步和异步,阻塞与非阻塞)...
  6. 三菱 FX5U PLC 4轴程序。 控制松下伺服3个, 步进电机一个
  7. 京东某员工离职,领导威胁其告知下家,做同样方向会追究责任!
  8. iOS11遇到的坑及解决方法
  9. 首发:吴恩达的 CS229的数学基础(概率论),有人把它做成了在线翻译版本!...
  10. HR表现出这5种行为,赶紧准备入职吧!