题目链接

luogu P1401 城市

题解

二分最小边权,dinic检验

代码

// luogu-judger-enable-o2
/*
二分最小边权,dinic检验
*/
#include<queue>
#include<cctype>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-')f =- 1 , c = getchar(); }
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
#define INF 1e9 + 7
const int maxn = 40007;
struct node {
int u,v,w,next;
bool operator < (const node & a) const {
return w < a.w;
}
} e[maxn];
int head[maxn],num = 1;
struct Node {
int v,flow,next;
} edge[maxn << 2];
inline void add_edge(int u,int v,int flow ) {
edge[++ num].v = v;edge[num].next = head[u];head[u] = num; edge[num].flow = flow;
edge[++ num].v = u;edge[num].next = head[v];head[v] = num; edge[num].flow = flow;
}
int cur[maxn];
int S = 1,T ;
int n,m,t;
std::queue<int>q;
int lev[maxn];
bool bfs() {
for(int i = 0;i <= n;++ i) cur[i] = head[i];
for(int i = 0;i <= n;++ i) lev[i] = -1;
q.push(S),lev[S] = 0;
while(!q.empty()) {
int u = q.front(); q.pop();
for(int i = head[u];i;i = edge[i].next)
if(edge[i].flow > 0 && lev[edge[i].v] == -1) lev[edge[i].v] = lev[u] + 1,q.push(edge[i].v);
}
return lev[T] != -1;
}
int dfs(int now,int flow) {
if(now == T) return flow;
int rest = 0 , delta;
for(int &i = cur[now];i;i = edge[i].next) {
int v = edge[i].v;
if(lev[v] != lev[now] + 1 || edge[i].flow <= 0) continue;
delta = dfs(v,std::min(flow - rest,edge[i].flow));
if(delta) {
edge[i].flow -= delta;
edge[i ^ 1].flow += delta;
rest += delta; if(rest == flow) break;
}
}
if(rest == flow) lev[now] = -1;
return rest;
}
int dinic() {
int ret = 0;
while(bfs()) ret += dfs(S,INF);
return ret;
}
bool check(int x) {
num = 1;
memset(head,0,sizeof head);
for(int i = 1;i <= m;++ i)
if(e[i].w <= x) add_edge(e[i].u,e[i].v,1);
else break;
return dinic() >= t;
}
int main() {
n = read(),m = read(),t = read(); T = n;
for(int i = 1;i <= m;++ i) e[i].u = read(), e[i].v = read(),e[i].w = read();
std::sort(e + 1, e + m + 1);
int l = 0,r = 100000007;
int ans = -1;
while(l <= r) {
int mid = l + r >> 1;
if(check(mid)) ans = mid , r = mid - 1;
else l = mid + 1;
}
printf("%d\n",ans);
return 0;
}

luogu P1401 城市的更多相关文章

  1. Luogu P1401 城市(二分+网络流)

    P1401 城市 题意 题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最 ...

  2. luogu P4842 城市旅行

    嘟嘟嘟 好题,好题 刚开始突发奇想写了一个\(O(n ^ 2)\)暴力,结果竟然过了?!后来才知道是上传题的人把单个数据点开成了10s-- 不过不得不说我这暴力写的挺好看的.删边模仿链表删边,加边的时 ...

  3. 洛谷 P1401 城市(二分+网络流)

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

  4. [洛谷P1401]城市

    题目大意:有$n(2\leqslant n\leqslant200)$个城市,$m(1\leqslant m\leqslant40000)$条无向边,你要找$T(1\leqslant T\leqsla ...

  5. P1401 城市(30分,正解网络流)

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

  6. luogu P1453 城市环路

    题目描述 整个城市可以看做一个N个点,N条边的单圈图(保证图连通),唯一的环便是绕城的环路.保证环上任意两点有且只有2条路径互通.图中的其它部分皆隶属城市郊区. 现在,有一位名叫Jim的同学想在B市开 ...

  7. LUOGU P1453 城市环路(基环树+dp)

    传送门 解题思路 一道基环树上$dp$的题,这种题比较套路吧,首先第一遍$dfs$把环找出来,然后对于环上的每一个点都向它子树内做一次树形$dp$,$f[i][0/1]$表示到了$i$这个点选或不选的 ...

  8. 洛谷 P1401 城市

    写在前面 今天来水主题库里的有水分的紫题,随便一翻竟然找到宝了. 小清新二分 + 网络流. 算法思路 考虑到题目中限制的是最大边权,要求最大边权最小,那么很容易想到二分答案. 单调性的证明:最大边权是 ...

  9. AC日记——城市 洛谷 P1401

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

随机推荐

  1. Scala进阶之路-高级数据类型之数组的使用

    Scala进阶之路-高级数据类型之数组的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的初始化方式 1>.长度不可变数组Array 注意:顾名思义,长度不可变数 ...

  2. js 正则学习小记之匹配字符串字面量

    今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高亮练手,所以用js代码当作例子) va ...

  3. CSS function--(来自网易)

    /* function */ .f-cb:after,.f-cbli li:after{;overflow:hidden;content:".";} .f-cb,.f-cbli l ...

  4. Django Book学习笔记(下)

    Django的Session框架 对于Django加密,大致使用这样的格式: hashtype$salt$hash 原因? 一次哈希是一次单向的加密过程,你能容易地计算出一个给定值的哈希码,但是几乎不 ...

  5. iOS8 UICollectionView横向滑动demo

    在iOS8中,scrollView和加载在它上面的点击事件会有冲突,所以做一个横向滑动的界面最好的选择就是UICollectionView. 这个效果可以用苹果公司提供的官方demo修改而来,下载地址 ...

  6. shell 判断路径

    判断路径 ];then echo "找到了123" if [ -d /root/Desktop/text ] then echo "找到了text" else ...

  7. 两个不能同时共存的条件orWhere查询

    举例: //我的所有的积分记录 1,我分享的:2,我点击的:(两个条件不能共存) $activity_log = ActivitySharedLog::where(function ($query) ...

  8. Javascript - 操作符

    操作符(Operator) void 如果void后是数字,就返回NAN,否则返回Undefined. alert(void "hello");//跟的字符 print undef ...

  9. linux下brctl配置网桥

    原文:http://zhumeng8337797.blog.163.com/blog/static/1007689142011643834429/ 先装好网卡,连上网线,这是废话,不用说了. 然后开始 ...

  10. 总结WCF开发中遇到的几个问题

    最近的项目,需要用到WCF,在以前的工作中,经常是将WCF托管在IIS中,主要有几下几个原因:      第一:部署非常方便,和部署一个站点没什么区别:      第二:不受防火墙的影响,因为一般服务 ...