P1396 营救_p1336燃烧失火

P1396 营救_p1336燃烧失火P1396营救218通过571提交题目提供者yeszy标签二分图论并查集福建省历届夏令营难度普及-题目描述“咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门……妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

P1396 营救
218
通过
571
提交
题目提供者yeszy
标签 二分 图论 并查集 福建省历届夏令营
难度 普及-
题目描述
“咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门……
妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小明被带到了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。

/*
MST最小瓶颈生成树.
定理:MST中的最长边必定小于其他生成树中的最长边. 
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#define MAXN 10001
using namespace std;
int n,m,father[MAXN],tot,ss,tt;
struct data
{
    int x,y,z;
}s[MAXN*2];
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
    
    if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
    return x*f;
}
bool cmp(const data &x,const data &y)
{
    return x.z<y.z;
}
int find(int x)
{
    return x!=father[x]? father[x]=find(father[x]):x;
}
int main()
{
    n=read();m=read();ss=read();tt=read();
    for(int i=1;i<=n;i++) father[i]=i;
    for(int i=1;i<=m;i++)
      s[i].x=read(),s[i].y=read(),s[i].z=read();    
    sort(s+1,s+m+1,cmp);
    for(int i=1;i<=m;i++)
    {
        int l1=find(s[i].x),l2=find(s[i].y);
        if(l1!=l2) tot++,father[l2]=l1;
        if(find(ss)==find(tt))
        {
            printf("%d",s[i].z);
            return 0;
        }
        if(tot==n-1) break;
    }
    return 0;
}
/*
二分拥挤值.
spfa大于拥挤值的边不选.
然后判能不能到达终点.
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 10001
using namespace std;
int n,m,s,t,head[MAXN],tot,dis[MAXN];
bool b[MAXN];
struct data
{
    int v,next,x;
}e[MAXN*4];
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
    
    if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
    return x*f;
}
void add(int u,int v,int x)
{
    e[++tot].v=v;
    e[tot].x=x;
    e[tot].next=head[u];
    head[u]=tot;
}
bool spfa(int x)
{
    int q[MAXN*2]={0},head1=1,tail=0;
    memset(b,0,sizeof(b));
    memset(dis,127/3,sizeof(dis));dis[s]=0;q[++tail]=s;b[s]=true;
    while(head1<=tail)
    {
        int u=q[head1++];b[u]=false;
        for(int i=head[u];i;i=e[i].next)
        {
            int v=e[i].v;
            if(!b[v]&&e[i].x<=x&&dis[v]>dis[u]+e[i].x)
            {
                b[v]=true;
                dis[v]=dis[u]+e[i].x;
                q[++tail]=v;
            }
        }
    }
    if(dis[t]==dis[0]) return false;
    return true;
}
int erfen(int l,int r)
{
    int mid,ans=0;
    while(l<=r)
    {
        mid=(l+r)>>1;
        if(spfa(mid)) ans=mid,r=mid-1;
        else l=mid+1;
    }
    return ans;
}
int main()
{
    int x,y,z;
    n=read();m=read();s=read();t=read();
    for(int i=1;i<=m;i++)
    {
        x=read();y=read();z=read();
        add(x,y,z);add(y,x,z);
    }
    printf("%d",erfen(1,10000));
    return 0;
}

转载于:https://www.cnblogs.com/nancheng58/p/6070779.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169939.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python灰度图生成g代码_artcam pro 通过灰度图生成G代码详细图文教程

    python灰度图生成g代码_artcam pro 通过灰度图生成G代码详细图文教程本文是使用artcampro把灰度图转成G代码,看到喜欢的雕刻,可以自己先做成灰度图,然后转换成G代码,今天特地做了一个教程,仅供刚刚接触者使用!新手可以看看,老手请高抬贵手,不要嘲笑。自己技术有限,将就看吧!希望对大家有用!灰度图生成G代码详细图文教程如下:1、先找一张灰度图:2、打开软件,点“文件”–“新的”–“通过图像文件”,找到刚才自己打开的灰度图,双击图片就可以了。3、设置雕刻尺…

    2022年6月20日
    46
  • Oracle 12C ORA-01017/ORA-28040问题总结「建议收藏」

    Oracle 12C ORA-01017/ORA-28040问题总结「建议收藏」在搭建12.2.0版本双节点RAC项目环境以后,测试链接其他客户端连接时出现了登陆的问题,客户端版本10.2.0.1链接报错如下:[root@12cbin]#oerrora2804028040,0000,"Nomatchingauthenticationprotocol"//*Cause:Noacceptibleauthenticationprotocol…

    2022年5月6日
    66
  • [黑苹果系列] M910x完美黑苹果系统安装教程 – 2 制作系统U盘-USB Creation

    [黑苹果系列] M910x完美黑苹果系统安装教程 – 2 制作系统U盘-USB Creation目前主流的苹果系统的安装方法有两种:1.U盘安装2.Windows下使用镜像恢复软件安装的方式目前,U盘安装是主流选择,这样安装调试好的黑苹果macOS问题最少,也较为稳定。之前的文章由于采用的是镜像恢复的方法,此次安装采取U盘安装系统的方式,因此重新写一篇。1.前期准备U盘一个,大于16G 安装工具软件包 镜像文件 制作合适的EFI文件 需要准备40GB以上独立固态硬盘空间2.下载macOs镜像3.制作安装U盘可以用TransMac或者balenaEt.

    2022年6月9日
    93
  • sql嵌套查询效率_sql嵌套查询返回多个字段

    sql嵌套查询效率_sql嵌套查询返回多个字段文章目录问题解决问题为了查询一个字段,使用了五层嵌套循环,但是花费了约1分钟但是5个表的数据每个最多只有10条,怎么会这么慢呢?解决比如查询语句SELECT*FROMstudet分析器会先看语句的第一个词,如果它发现第一个词是SELECT关键字的时候,它会跳到FROM关键字,然后通过FROM关键字找到表名并把表装入内存。内存中有student表接着是找WHERE关键字,如果找不到则返回到SELECT找字段解析SELECT*FROMstudetWHEREstu_id=1

    2022年8月10日
    4
  • 网络视频教程(共57个)全实战过程

    网络视频教程(共57个)全实战过程01ping命令的使用http://images.enet.com.cn/eschool/wmv/ping.wmv02netstat命令的使用http://images.enet.com.cn/eschool/wmv/netstat.wmv03tasklist和taskkill的使用http://images.enet.com.cn/eschool/wmv/tasklist.wmv0

    2022年6月14日
    28
  • Java0xffffffff为什么表示为-1

    Java0xffffffff为什么表示为-1inti=0xffffffff;System.out.println(i);输出-1上面的程序有个问题为什么inti=0xffffffff;没有报溢出错误,且输出为-1?因为0xffffffff实际是二进制,程序中任何十进制,八进制,16进制的数在计算机底层都是二进制,表示成X进制只是为了让人看明白,所以0xffffffff在电脑中就是32个1,而不是2的32次…

    2022年5月16日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号