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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 六种进程间通信方式[通俗易懂]

    六种进程间通信方式[通俗易懂]前言开场小故事炎炎夏日,张三骑着单车去面试花了1小时,一路上汗流浃背。结果面试过程只花了5分钟就结束了,面完的时候,天还是依然是亮的,还得在烈日下奔波1小时回去。面试五分钟,骑车两小时。你看,张三因面试没准备好,吹空调的时间只有…

    2022年10月11日
    3
  • ScheduledExecutorService 接口[通俗易懂]

    ScheduledExecutorService 接口[通俗易懂]newScheduledThreadPool()或者newSingleThreadScheduled-Executor()方法:延迟执行、周期性执行的执行器如果想在某一段时间之后执行线程操作,或者周期性地重复执行线程操作,则可以使用工厂类Executors的newScheduledThreadPool()方法或者newSingleThreadSche…

    2022年5月5日
    68
  • idea激活码2021【2021.10最新】

    (idea激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsaWNlbnNlSWQi…

    2022年3月27日
    142
  • Java遍历map集合的4中方式

    方法一通过Map.entrySet遍历key和value,在for-each循环中使用entries来遍历.推荐,尤其是容量大时这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。Map<Integer,Integer>map=newHashMap<Integer,Integer>();for(Map.Entry&l…

    2022年4月8日
    51
  • C# -XML用法(XmlDocument )

    C# -XML用法(XmlDocument )使用visualstudio中自带的xml解析器,引入System.Xml命名空间。1.向文件中写入配置xml文件实现效果:&amp;lt;?xmlversion=&quot;1.0&quot;encoding=&quot;utf-8&quot;?&amp;gt;&amp;lt;某某某某公司&amp;gt;&amp;lt;执行董事兼总经理&amp;gt;曾振帅&amp;lt;/执行董事兼总经

    2022年6月19日
    64
  • idea查看接口的实现类的方法_进入接口

    idea查看接口的实现类的方法_进入接口shift+alt+B可进入实现类方法

    2022年8月15日
    3

发表回复

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

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