题意

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

题解

简单的网络流判定。

一看问法想到二分答案。然后边不能重复直接上网络流。

(用边长小于mid的边建图然后跑最大流,最后比较流量和k)

(然而不知为何写挂了)

 #include<cstdio>
#include<cstring>
#include<queue>
#define find_min(a,b) a<b?a:b
#define find_max(a,b) a>b?a:b using namespace std; const int N = ;
const int MAX = (int)10e7; struct Edge{
int s,e,v,next;
}edge[*N*N],mat[N*N]; int e_num,head[N],d[N],sp,tp;
int n,m; void AddEdge(int a,int b,int c){
edge[e_num].s=a; edge[e_num].e=b; edge[e_num].v=c;
edge[e_num].next=head[a]; head[a]=e_num++; edge[e_num].s=b; edge[e_num].e=a; edge[e_num].v=c;
edge[e_num].next=head[b]; head[b]=e_num++;
} int bfs(){
queue <int> q;
memset(d,-,sizeof(d));
d[sp]=;
q.push(sp);
while(!q.empty()){
int cur=q.front();
q.pop();
for(int i=head[cur];i!=-;i=edge[i].next){
int u=edge[i].e;
if(d[u]==- && edge[i].v>){
d[u]=d[cur]+;
q.push(u);
}
}
}
return d[tp] != -;
} int dfs(int a,int b){
int r=;
if(a==tp)return b;
for(int i=head[a];i!=- && r<b;i=edge[i].next){
int u=edge[i].e;
if(edge[i].v> && d[u]==d[a]+){
int x=find_min(edge[i].v,b-r);
x=dfs(u,x);
r+=x;
edge[i].v-=x;
edge[i^].v+=x;
}
}
if(!r)d[a]=-;
return r;
} int dinic(int sp,int tp){
int total=,t;
while(bfs()){
while(t=dfs(sp,MAX))
total+=t;
}
return total;
}
void init(int index){
int i,j;
e_num=;
memset(head,-,sizeof(head));
for(i=;i<=m;i++){
if(mat[i].v<=index)AddEdge(mat[i].s,mat[i].e,);
}
} int main()
{
int t_num,i,j,a,b,c;
while(~scanf("%d%d%d",&n,&m,&t_num)){
sp=;tp=n;
int high=-,low=MAX;
for(i=;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
high=find_max(high,c);
low=find_min(low,c);
mat[i].s=a; mat[i].e=b; mat[i].v=c;
}
int mid,ans;
while(low<=high){
mid=(low+high)/;
init(mid);
ans=dinic(sp,tp);
if(ans<t_num)low=mid+;
else high=mid-;
}
printf("%d\n",low);
}
return ;
}

luoguP1401 城市(二分答案+最大流)的更多相关文章

  1. BZOJ 1570: [JSOI2008]Blue Mary的旅行( 二分答案 + 最大流 )

    二分答案, 然后对于答案m, 把地点分成m层, 对于边(u, v), 第x层的u -> 第x+1层的v 连边. 然后第x层的u -> 第x+1层的u连边(+oo), S->第一层的1 ...

  2. BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )

    一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...

  3. BZOJ 1305 CQOI2009 dance跳舞 二分答案+最大流

    题目大意:给定n个男生和n个女生,一些互相喜欢而一些不.举行几次舞会,每次舞会要配成n对.不能有同样的组合出现.每一个人仅仅能与不喜欢的人跳k次舞,求最多举行几次舞会 将一个人拆成两个点.点1向点2连 ...

  4. HDU3081(KB11-N 二分答案+最大流)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  5. BZOJ2547 CTSC2002玩具兵(最短路径+二分答案+最大流)

    先不考虑只有一个显得有些特殊的天兵. 可以发现超能力的作用实质上是使兵更换职业.每一个兵到达某个位置最少需要更换职业的次数是彼此独立的,因为如果需要某两人互换职业可以使他们各自以当前职业到达需要到的地 ...

  6. Gym - 101908G 二分答案+最大流

    After the end of the truck drivers' strike, you and the rest of Nlogônia logistics specialists now h ...

  7. 紫书 习题 11-10 UVa 12264 (二分答案+最大流)

    书上写的是UVa 12011, 实际上是 12264 参考了https://blog.csdn.net/xl2015190026/article/details/51902823 这道题就是求出一种最 ...

  8. Marriage Match II 【HDU - 3081】【并查集+二分答案+最大流】

    题目链接 一开始是想不断的把边插进去,然后再去考虑我们每次都加进去边权为1的边,直到跑到第几次就没法继续跑下去的这样的思路,果不其然的T了. 然后,就是想办法咯,就想到了二分答案. 首先,我们一开始处 ...

  9. bzoj 3993 星际战争 - 二分答案 - 最大流

    3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值减少到0或者 ...

随机推荐

  1. ios上有时候提交按钮点击两次才可以取消输入框软键盘

    ios上有时候提交按钮点击两次才可以取消输入框软键盘,点击第一次软键盘消失,点击第二次输入框页面消失,这样用户体验不好.我的做法是用 touchstart 代替click来处理 反应快,但是有时候会出 ...

  2. spark集群体系结构

  3. Install the high performance Nginx web server on Ubuntu

    Look out Apache, there's a web server – Nginx (pronounced Engine X) – that means to dismantle you as ...

  4. JavaScript学习——使用JS完成页面定时弹出广告

    1.获取图片的位置(document.getElementById(“”))  隐藏图片:display:none 定时操作:setInterval(“显示图片的函数”,3000); 2.步骤分析 ( ...

  5. es6 学习7 Set 和 Map 数据结构

     Set 和 Map 数据结构 一.Set ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. const set = new Set([1, 2, 3, 4, ...

  6. codevs 1288 埃及分数 (迭代加深搜索)

    题目大意:给你一个分数$a/b$,把它拆解成$\sum_{i=1}^{n}1/ai$的形式,必须保证$ai$互不相同的情况下,尽量保证n最小,其次保证分母最大的分数的分母最小 什么鬼玄学题!!! 因为 ...

  7. nessus 漏洞扫描安装和使用

    介绍 Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件.总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件.  软件特色 * 提供完整的电脑漏洞扫描服务, 并随时更 ...

  8. hook中ref使用

    hook使用ref 父组件: 引入                  useRef 声明ref的名字     const dateRef = useRef() 复值给组件         ref={d ...

  9. Oracle with as 嵌套

    oracle  with as可以理解为临时视图,可以极大的简化sql语句,并且支持嵌套使用. With c3 As(Select * From v_tr_daily Where p_date=to_ ...

  10. Java基础学习总结(43)——Java8 Lambda揭秘

    再了解了Java 8 Lambda的一些基本概念和应用后, 我们会有这样的一个问题: Lambda表达式被编译成了什么?. 这是一个有趣的问题,涉及到JDK的具体的实现. 本文将介绍OpenJDK对L ...