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 城市的更多相关文章
- Luogu P1401 城市(二分+网络流)
P1401 城市 题意 题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最 ...
- luogu P4842 城市旅行
嘟嘟嘟 好题,好题 刚开始突发奇想写了一个\(O(n ^ 2)\)暴力,结果竟然过了?!后来才知道是上传题的人把单个数据点开成了10s-- 不过不得不说我这暴力写的挺好看的.删边模仿链表删边,加边的时 ...
- 洛谷 P1401 城市(二分+网络流)
题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最长的边的长度最小,边不能 ...
- [洛谷P1401]城市
题目大意:有$n(2\leqslant n\leqslant200)$个城市,$m(1\leqslant m\leqslant40000)$条无向边,你要找$T(1\leqslant T\leqsla ...
- P1401 城市(30分,正解网络流)
题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最长的边的长度最小,边不能 ...
- luogu P1453 城市环路
题目描述 整个城市可以看做一个N个点,N条边的单圈图(保证图连通),唯一的环便是绕城的环路.保证环上任意两点有且只有2条路径互通.图中的其它部分皆隶属城市郊区. 现在,有一位名叫Jim的同学想在B市开 ...
- LUOGU P1453 城市环路(基环树+dp)
传送门 解题思路 一道基环树上$dp$的题,这种题比较套路吧,首先第一遍$dfs$把环找出来,然后对于环上的每一个点都向它子树内做一次树形$dp$,$f[i][0/1]$表示到了$i$这个点选或不选的 ...
- 洛谷 P1401 城市
写在前面 今天来水主题库里的有水分的紫题,随便一翻竟然找到宝了. 小清新二分 + 网络流. 算法思路 考虑到题目中限制的是最大边权,要求最大边权最小,那么很容易想到二分答案. 单调性的证明:最大边权是 ...
- AC日记——城市 洛谷 P1401
题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最长的边的长度最小,边不能 ...
随机推荐
- Java基础-时间复杂度计算方式
Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...
- vue中assets文件夹与static文件夹的区别
1.如果这些产品图片文件“万年不变”,放在 /static 目录里,(不需要使用require将这些图片作为模块来引用) var products = [{ img: '/static/img/pro ...
- linux服务器安装mysql并配置外网访问
linux服务器安装mysql并配置外网访问 更新系统,如果不运行该命令,直接安装mysql,会出现"有几个软件包无法下载 sudo apt-get update 安装mysql sudo ...
- git push --set-upstream
我在本地建了一个分支wangxiao,开发完之后,提交代码 git add .git commit -m '注释'git push 出现下面的问题,这个意思是:当前分支没有与远程分支关联. 因此导致了 ...
- 无法在线安装Genymotion Eclipse插件,显示”There are no categoryzed items“
去掉对“Group items by category"的勾选.
- VAE(Variational Autoencoder)的原理
Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint ar ...
- 【转载】chmod命令详解
查看linux文件的权限:ls -l 文件名称 查看linux文件夹的权限:ls -ld 文件夹名称(所在目录) 修改文件及文件夹权限: sudo chmod -(代表类型)×××(所有者)×××(组 ...
- ORACLE数据库数据文件转移方法(不同于move方法)
1) 手动拷贝要转移的数据数据文件'd:\OracleData\GWTABLE42.DBF'到新的位置'E:\OracleData\GWTABLE42.DBF'. 2) 把数据文件所属的表空间Offl ...
- 014_mac下的端口查看
一. 使用netstat去过滤listen效果不怎么理想. $ netstat -an|grep -i --color "listen" tcp6 0 0 ::1.5601 *.* ...
- centos7执行 wget命令: command not found的两种解决方法
1.rpm 安装 下载wget的RPM包: http://mirrors.163.com/centos/6.8/os/x86_64/Packages/wget-1.12-8.el6.x86_64.rp ...