P1401 城市

题意

题目描述

N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最长的边的长度最小,边不能重复用。

输入输出格式

输入格式:

第1行三个整数N,M,T用空格隔开。

第2行到P+1行,每行包括三个整数Ai,Bi,Li表示城市Ai到城市Bi之间有一条长度为Li的道路。

输出格式:

输出只有一行,包含一个整数,即经过的这些道路中最长的路的最小长度。

输入输出样例

输入样例#1:

7 9 2
1 2 2
2 3 5
3 7 5
1 4 1
4 3 1
4 5 7
5 7 1
1 6 3
6 7 3

输出样例#1:

5

思路

这道题可以用并查集做。 --alecli

每条边最多走一遍,不就相当于对图跑一遍网络流,流量必须大于等于\(T\)吗?所以我们可以二分答案,对原图跑网络流,判断流量是否满足要求。

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,m,t,ans,L=INT_MAX,R,cur[205],dep[205];
int cnt=1,top[205],to[160005],len[160005],cap[160005],rcap[160005],nex[160005];
int read()
{
int re=0;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();
return re;
}
bool bfs(int lim)
{
memset(cur,0,sizeof cur);
memset(dep,0,sizeof dep);
cur[1]=top[1],dep[1]=1;
queue<int>Q;
Q.push(1);
while(!Q.empty())
{
int now=Q.front();Q.pop();
for(int i=cur[now];i;i=nex[i])
if(!dep[to[i]]&&len[i]<=lim&&cap[i])
{
cur[to[i]]=top[to[i]],dep[to[i]]=dep[now]+1;
Q.push(to[i]);
}
}
return dep[n]!=0;
}
int dfs(int now,int flow,int lim)
{
if(now==n) return flow;
int re=0;
for(int &i=cur[now];i;i=nex[i])
if(dep[to[i]]==dep[now]+1&&len[i]<=lim&&cap[i])
{
int lzq=dfs(to[i],min(flow,cap[i]),lim);
if(lzq)
{
re+=lzq,flow-=lzq;
cap[i]-=lzq,cap[i^1]+=lzq;
if(!flow) break;
}
}
return re;
}
bool check(int lim)
{
int tmp=0;
for(int i=1;i<=cnt;i++) cap[i]=rcap[i];
while(bfs(lim)) tmp+=dfs(1,INT_MAX,lim);
return tmp>=t;
}
int main()
{
n=read(),m=read(),t=read();
while(m--)
{
int x=read(),y=read(),z=read();
to[++cnt]=y,len[cnt]=z,cap[cnt]=rcap[cnt]=1,nex[cnt]=top[x],top[x]=cnt;
to[++cnt]=x,len[cnt]=z,cap[cnt]=rcap[cnt]=0,nex[cnt]=top[y],top[y]=cnt;
to[++cnt]=y,len[cnt]=z,cap[cnt]=rcap[cnt]=0,nex[cnt]=top[x],top[x]=cnt;
to[++cnt]=x,len[cnt]=z,cap[cnt]=rcap[cnt]=1,nex[cnt]=top[y],top[y]=cnt;
L=min(L,z),R=max(R,z);
}
while(L<=R)
{
int mid=(L+R)>>1;
if(check(mid)) ans=mid,R=mid-1;
else L=mid+1;
}
printf("%d",ans);
return 0;
}

Luogu P1401 城市(二分+网络流)的更多相关文章

  1. luogu P1401 城市

    题目链接 luogu P1401 城市 题解 二分最小边权,dinic检验 代码 // luogu-judger-enable-o2 /* 二分最小边权,dinic检验 */ #include< ...

  2. hihoCoder 1389 Sewage Treatment 【二分+网络流+优化】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)

    #1389 : Sewage Treatment 时间限制:2000ms 单点时限:2000ms 内存限制:256MB 描述 After years of suffering, people coul ...

  3. POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9658   Accepted: ...

  4. BZOJ_3993_[SDOI2015]星际战争_二分+网络流

    BZOJ_3993_[SDOI2015]星际战争_二分+网络流 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进 ...

  5. 【bzoj3130】[Sdoi2013]费用流 二分+网络流最大流

    题目描述 Alice和Bob做游戏,给出一张有向图表示运输网络,Alice先给Bob一种最大流方案,然后Bob在所有边上分配总和等于P的非负费用.Alice希望总费用尽量小,而Bob希望总费用尽量大. ...

  6. 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流

    题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...

  7. 【bzoj1733】[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 二分+网络流最大流

    题目描述 Farmer John is constructing a new milking machine and wishes to keep it secret as long as possi ...

  8. 【bzoj1532】[POI2005]Kos-Dicing 二分+网络流最大流

    题目描述 Dicing 是一个两人玩的游戏,这个游戏在Byteotia非常流行. 甚至人们专门成立了这个游戏的一个俱乐部. 俱乐部的人时常在一起玩这个游戏然后评选出玩得最好的人.现在有一个非常不走运的 ...

  9. BZOJ_1532_[POI2005]Kos-Dicing_二分+网络流

    BZOJ_1532_[POI2005]Kos-Dicing_二分+网络流 Description Dicing 是一个两人玩的游戏,这个游戏在Byteotia非常流行. 甚至人们专门成立了这个游戏的一 ...

随机推荐

  1. python 使用字符串

    字符串方法 string.digits:包含数字0-9的字符串 string.letters:包含所有字母(大写或小写)的字符串 string.lowercase:包含所有小写字母的字符串 strin ...

  2. java中的break continue

    break语句 在任何循环语句的主体部分,均可用break控制循环的流程.break用于强行退出循环,不执行循环中剩余的语句.(break语句也在switch语句中使用) public class B ...

  3. 0922CSP-S模拟测试赛后总结

    连发三篇爆炸实录我的心态竟然还这么好…… 昨天题目的D2.稍难. 这也不是我连续拿倒数第一的理由. T1不会.赛时硬写了一个30分的三次方暴力.还有一个地方写挂了.如果不是数据足够水我就爆零了. 也就 ...

  4. Ubuntu 更新错误修复大全

    合并列表问题 当你在终端中运行更新命令时,你可能会碰到这个错误“合并列表错误”,就像下面这样: E:Encountered a section with no Package: header, E:P ...

  5. PSCC2019常用基础操作

    一.常用设置 1.界面设置(快捷键Ctrl+K):可以对PS界面的颜色.导出格式.性能等等进行设置(这里暂存盘建议设置D盘或F盘,默认C盘). 2.常用面板整理(菜单栏->窗口) 二.常用快捷键 ...

  6. yolo+keras+tensorflow出错:No module named 'leaky_relu'+

    结论:keras2.1.5+tensorflow1.6.0即可. 首先出现的是:No module named 'leaky_relu',此时把keras改成2.1.5照样出错,改成keras2.1. ...

  7. (37)C#Linq

    https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/let-clause 一.定义 Linq(Lang ...

  8. Java 的锁-老王女儿的爱情

    对象锁: new一个对象,都会给这个实例创建一把锁,对象中的方法必须在实例创建后,通过调用方法获取锁,一个线程进去这个方法之前拿到对象的锁,才能调用方法,否则被阻塞,举个例子,老王有个如花似玉的女儿, ...

  9. 第二十二篇:Spring简单定时任务

    背景:有些操作,不适合放在页面上让用户手动触发去执行,比如一些需要不断更新的数据(如统计数据)有些需要同步的数据,不需要非常实时,可以在固定的时间或者固定的频率执行同步 第一步:配置xml第二步:编写 ...

  10. web系统基础

    网络标准体系架构 B/S(browser/server浏览器)服务器有iis.apache.Tomcat.Ngix.Lighttp等 C/S(client/server客户端)如微信.QQ.Outlo ...