题目描述

“咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门……

妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小明被带到了t区,而自己在s区。

该市有m条大道连接n个区,一条大道将两个区相连接,每个大道有一个拥挤度。小明的妈妈虽然很着急,但是不愿意拥挤的人潮冲乱了她优雅的步伐。所以请你帮她规划一条从s至t的路线,使得经过道路的拥挤度最大值最小。

输入输出格式

输入格式:

第一行四个数字n,m,s,t。

接下来m行,每行三个数字,分别表示两个区和拥挤度。

(有可能两个区之间有多条大道相连。)

输出格式:

输出题目要求的拥挤度。

输入输出样例

输入样例#1:

3 3 1 3
1 2 2
2 3 1
1 3 3
输出样例#1:

2

说明

数据范围

30% n<=10

60% n<=100

100% n<=10000,m<=2n,拥挤度<=10000

题目保证1<=s,t<=n且s<>t,保证可以从s区出发到t区。

样例解释:

小明的妈妈要从1号点去3号点,最优路线为1->2->3。

我们一看题:拥挤度最大 值最小,哦?二分差不多。然鹅本鸽今天并不想写二分,我觉得MIT海星。

我们跑一遍朴素的Kruskal,但是并过不了样例。

那就跑一遍SPfa,找最短路上最大边,也不行。

还是老老实实写二分吧。

法一:二分答案

边权到了10000,二分似乎可行,复杂度O(logn),check函数可以跑一遍spfa(其实只跑bfs也行),看二分出的答案是否可行。

spfa的复杂度是O(玄学常数*m),总复杂度可近似看做O(mlogn)

法二:MIT

出于好奇,并查看Chemist代码,发现了MIT的做法,只需稍加判断即可,当起点和终点 同属于一个联通块时,他们就联通了,答案筛选结束。

code Version1

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue> using namespace std; int n,m,s,t,tot,l=,r;
int head[],dis[],vis[];
struct node{
int to,val,next;
}edge[]; void add(int x,int y,int z)
{
edge[++tot].to=y;
edge[tot].val=z;
edge[tot].next=head[x];
head[x]=tot;
} bool spfa_check(int x)
{
memset(vis,,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
int qwq=dis[];
queue<int>q;
q.push(s);
vis[s]=;dis[s]=;
while(!q.empty())
{
int u=q.front();
q.pop();vis[u]=;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].val&&edge[i].val<=x)
{
dis[v]=dis[u]+edge[i].val;
if(!vis[v]) q.push(v),vis[v]=;
}
}
}
if(dis[t]!=qwq) return ;
else return ;
} int main()
{
scanf("%d%d%d%d",&n,&m,&s,&t);
for(int i=;i<=m;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
r=max(r,z);
}
while(l<r)
{
int mid=(l+r)>>;
if(spfa_check(mid)) r=mid;
else l=mid+;
}
printf("%d",l);
return ;
}

最新文章

  1. MYSQL数据库导入出错:#1046 - No database selected
  2. python抓取网页过程
  3. phpweb漏洞合集
  4. XidianOJ 1097 焊板子的xry111
  5. 每日一笔记之3:QTconnect()
  6. node下新建工程
  7. Python基础教程【读书笔记】 - 2016/7/24
  8. C中调用LUA回调(LUA注册表)
  9. 序列化、反序列化和transient关键字的作用
  10. 利用HTML5开发Android(6)---构建HTML5离线应用
  11. Atom编辑器入门到精通(六) Markdown支持
  12. 在HTML中怎么去掉a标签(超链接)的下划线?
  13. LCD的背光及觸摸屏
  14. phpstorm9整合本地apache和豆沙绿主题设置(附资源)
  15. Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: javax/transaction/Synchronization
  16. 团队作业3--需求改进&amp;系统设计
  17. 你知道织梦后台安装插件时为什么会出现这个Character postion 686, 'item'&n
  18. Python(day1)
  19. 在HTML中用循环语句
  20. day5 if else elif 判断语句

热门文章

  1. hihocoder 1165 : 益智游戏
  2. 2017年icpc西安网络赛 Maximum Flow (找规律+数位dp)
  3. Java加载配置文件类
  4. 转:浅谈Linux的内存管理机制
  5. freeswitch对媒体的处理的三种方式
  6. css实现文字渐变
  7. java集合框架 hashMap 简单使用
  8. Java同步锁何时释放?
  9. linux 下shell脚本执行多个命令的方法
  10. hdu 4950 Monster(数学题,多校8)