题目链接

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. BSGS 算法

    求解 A^x ≡ B mod C  C是质数 的最小非负整数解 证明:A^x ≡ A^(x%φ(C)) mod C A^(x%φ(C))  ≡ A^(x-k*φ(C)) ≡ (A^x)/ A^(k*φ ...

  2. SQL语句(七)简单查询

    --简单信息查询 --例1 查询所有学生的信息 --学生 -- Student --所有学生 -- 不限定班级.性别.年龄等条件 --所有信息 -- 所有字段,* select * from stud ...

  3. Linux 命令详解(一)export 命令

    一.Windows 环境变量 1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似 ...

  4. 《高性能MySQL》——第五章创建高性能索引

    1.创建索引基本语法格 在MySQL中,在已经存在的表上,可以通过ALTER TABLE语句直接为表上的一个或几个字段创建索引.基本语法格式如下: ALTER TABLE 表名 ADD [UNIQUE ...

  5. Yii 自定义模型路径

    例如现有两个 Yii 项目,分别是 test1 和 test2.在 test1 中,已经有模型了,test2 直接调用 test1 中的模型,其实添加个别名,然后修改下配置即可. 先在 index.p ...

  6. html5 canvas显示文字(写上5个字,纪念我那刚刚逝去的爱情)

    <script type="text/javascript"> window.addEventListener('load',eventWindowLoaded,fal ...

  7. [转载]Web API OData Inlinecount not working

    http://stackoverflow.com/questions/15422831/web-api-odata-inlinecount-not-working

  8. nginx php上传大文件的设置(php-fpm)

    对于lnmp架构的大文件上传的问题,有几个地方需要修改,另外还有几个参数如果更改过需要注意,下面是详细的需要注意的地方: nginx的修改              send_timeout    6 ...

  9. 20155233 2016-2017-2 《Java程序设计》第5周学习总结

    20155233 2016-2017-2 <Java程序设计>第5周学习总结 学习目标 理解异常架构 牚握try...catch...finally处理异常的方法 会用throw,thro ...

  10. 20155230 2016-2017-2 《Java程序设计》第五周学习总结

    20155230 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 1.错误处理通常称为异常处理. 2.catch括号中列出的异常不得有继承关系,否则会发生编译 ...