Poj 2455 Secret Milking Machine【二分+最大流】

poj pku 解题报告 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1011 1012 1013 1014 1015 1017 1018 1019 1028 1032 1035 1040 1042 1045 1046 1047 1050 1056 1061 1062 1063 1065 1067 1068 1080 1083 1088 1089 1091 1094 1095 1102 1111 1113 1117 1118 1125 1126 1127 1129 1130 1131 1132 1141 1142 1144 1149 1151 1157 1159 1160 1163 1164 1166 1174 1177 1182 1183 1186 1188 1189 1190 1191 1195 1200 1201 1207 1218 1226 1251 1256 1258 1260 1273 1274 1276 1283 1298 1305 1306 1308 1315 1316 1319 1321 1323 1324 1325 1328 1338 1339 1364 1389 1401 1422 1423 1426 1455 1458 1459 1469 1477 1485 1511 1517 1519 1523 1552 1562 1564 1565 1573 1579 1651 1654 1655 1656 1658 1659 1663 1664 1699 1700 1703 1716 1730 1737 1740 1753 1771 1797 1799 1804 1833 1837 1840 1844 1861 1887 1906 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1970 1979 1980 1985 1988 1989 2000 2001 2002 2018 2019 2021 2027 2033 2044 2051 2081 2084 2104 2109 2112 2135 2136 2137 2153 2155 2181 2182 2184 2185 2186 2187 2188 2190 2192 2195 2228 2229 2234 2236 2241 2242 2245 2247 2248 2249 2253 2264 2287 2299 2301 2309 2336 2337 2348 2352 2353 2362 2371 2378 2386 2387 2388 2389 2392 2393 2394 2402 2403 2406 2411 2413 2419 2421 2446 2449 2456 2479 2488 2492 2503 2509 2513 2524 2528 2531 2533 2545 2553 2559 2564 2575 2576 2586 2591 2593 2594 2602 2623 2632 2656 2676 2680 2707 2750 2774 2777 2780 2782 2812 2818 2840 2908 2922 2934 2965 2983 2993 2996 3020 3041 3168 3169 3176 3183 3184 3185 3191 3193 3214 3219 3224 3250 3253 3255 3256 3257 3258 3259 3264 3267 3273 3275 3277 3278 3279 3280 3295 3297 3302 3303 3311 3312 3321 3325 3348 3349 3355 3356 3357 3368 3372 3386 3400 3421 3424 3425 3427 3428 3438 3452 3468 3486 3517 3561 3585 3589 3602 3612 3614 3615 3616 3617 3618 3619 3620 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3637 3660 3661 3662 3663 3664 3665 3666 3668 3669 3670 3671 3672 3673 3687 立即下载

Secret Milking Machine

Time Limit: 1000MS

 

Memory Limit: 65536K

Total Submissions: 11570

 

Accepted: 3354

Description

Farmer John is constructing a new milking machine and wishes to keep it secret as long as possible. He has hidden in it deep within his farm and needs to be able to get to the machine without being detected. He must make a total of T (1 <= T <= 200) trips to the machine during its construction. He has a secret tunnel that he uses only for the return trips. 

The farm comprises N (2 <= N <= 200) landmarks (numbered 1..N) connected by P (1 <= P <= 40,000) bidirectional trails (numbered 1..P) and with a positive length that does not exceed 1,000,000. Multiple trails might join a pair of landmarks. 

To minimize his chances of detection, FJ knows he cannot use any trail on the farm more than once and that he should try to use the shortest trails. 

Help FJ get from the barn (landmark 1) to the secret milking machine (landmark N) a total of T times. Find the minimum possible length of the longest single trail that he will have to use, subject to the constraint that he use no trail more than once. (Note well: The goal is to minimize the length of the longest trail, not the sum of the trail lengths.) 

It is guaranteed that FJ can make all T trips without reusing a trail.

Input

* Line 1: Three space-separated integers: N, P, and T 

* Lines 2..P+1: Line i+1 contains three space-separated integers, A_i, B_i, and L_i, indicating that a trail connects landmark A_i to landmark B_i with length L_i.

Output

* Line 1: A single integer that is the minimum possible length of the longest segment of Farmer John's route.

Sample Input

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

Sample Output

5

Hint

Farmer John can travel trails 1 - 2 - 3 - 7 and 1 - 6 - 7. None of the trails travelled exceeds 5 units in length. It is impossible for Farmer John to travel from 1 to 7 twice without using at least one trail of length 5. 

Huge input data,scanf is recommended.

Source

USACO 2005 February Gold

 

题目大意:

给你n个点,m条无向边,让你找一个值,找到t种走法:使得能够从起点1走到终点n没有重复路径的情况,并且这t种走法中每两点之间路径值不超过你要找到的这个值。


思路:


1、首先,我们想要找这样一个值最暴力最简单的方式就是枚举,然而因为枚举一定超时,而且考虑到找到的种类数会随着枚举出来的值增加而增加,满足单调递增性,那么我们二分查找ans,设定当前枚举到的值是mid;


2、根据当前值mid建图:

①设定源点S,连入节点1,设定权值为INF,表示期望获得无数条可行路径。

②设定汇点T,将n连入汇点,设定权值为INF,表示期望获得无数条可行路径。

③将m条无向边进行判断,其两点间距离如果小于等于mid,那么建立当前边(注意是无向),设定权值为1,表示这条边只能走一次(因为找到的每一种路径都不能有重复边)。


3、然后不断在二分过程中跑最大流,跑得一次最大流,如果其maxflow>=t(注意不是正好要t种路径,而是找到t种就可以,所以是大于等于),记录ans=mid,一直二分下去,直到不能二分为止。


4、直接枚举上界为1000000会TLE,需要枚举上界为最大边权值才能过。


Ac代码:


#include<stdio.h>
#include<string.h>
#include<queue>
#include<iostream>
using namespace std;
#define INF 0x3f3f3f3f
struct node
{
    int x,y,w;
}a[1000000];
struct node2
{
    int from;
    int to;
    int next;
    int w;
}e[1000000];
int head[20000];
int cur[20000];
int divv[20000];
int n,m,t,ss,tt,cont;
void add(int from,int to,int w)
{
    e[cont].to=to;
    e[cont].w=w;
    e[cont].next=head[from];
    head[from]=cont++;
}
void getmap(int mid)
{
    ss=n+1;
    tt=ss+1;
    cont=0;
    memset(head,-1,sizeof(head));
    add(ss,1,0x3f3f3f3f);
    add(1,ss,0);
    add(n,tt,0x3f3f3f3f);
    add(tt,n,0);
    for(int i=0;i<m;i++)
    {
        if(a[i].w<=mid)
        {
            add(a[i].x,a[i].y,1);
            add(a[i].y,a[i].x,0);
            add(a[i].y,a[i].x,1);
            add(a[i].x,a[i].y,0);
        }
    }
}
int makedivv()
{
    queue<int >s;
    s.push(ss);
    memset(divv,0,sizeof(divv));
    divv[ss]=1;
    while(!s.empty())
    {
        int u=s.front();
        s.pop();
        if(u==tt)return 1;
        for(int i=head[u];i!=-1;i=e[i].next)
        {
            int v=e[i].to;
            int w=e[i].w;
            if(w&&divv[v]==0)
            {
                divv[v]=divv[u]+1;
                s.push(v);
            }
        }
    }
    return 0;
}
int Dfs(int u,int maxflow,int tt)
{
    if(u==tt)return maxflow;
    int ret=0;
    for(int &i=cur[u];i!=-1;i=e[i].next)
    {
        int v=e[i].to;
        int w=e[i].w;
        if(w&&divv[v]==divv[u]+1)
        {
            int f=Dfs(v,min(maxflow-ret,w),tt);
            e[i].w-=f;
            e[i^1].w+=f;
            ret+=f;
            if(ret==maxflow)return ret;
        }
    }
    return ret;
}
int Dinic(int mid)
{
    getmap(mid);
    int ans=0;
    while(makedivv()==1)
    {
        memcpy(cur,head,sizeof(head));
        ans+=Dfs(ss,INF,tt);
    }
    return ans;
}
int main()
{
    while(~scanf("%d%d%d",&n,&m,&t))
    {
        int maxn=-1;
        for(int i=0;i<m;i++)
        {
            scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);
            maxn=max(maxn,a[i].w);
        }
        int l=0;
        int r=maxn;
        int mid;
        int ans=INF;
        while(r>=l)
        {
            mid=(l+r)/2;
            int tmp=Dinic(mid);
            if(tmp<t)
            {
                l=mid+1;
            }
            else
            {
                ans=mid;
                r=mid-1;
            }
        }
        printf("%d\n",ans);
    }
}




工程制图习题集张大庆课后习题答案解析 所以,我想向大家求助,希望能得到一些学习资料、学习方法和学习经验,帮助我更好地理解和掌握这门课程。在寻找学习资料的过程中,我发现了一款叫做资小料的APP,它里面有很多关于工程制图的学习资料,包括视频教程、习题解答和考试真题等。通过使用资小料,我逐渐掌握了工程制图的基本理论和方法,解决了很多学习中遇到的问题。在这里,我想推荐给和我一样在学习《工程制图习题集》这门课的同学们,希望大家也能从这款APP中受益,共同进步。上传者: 『Consentesdei』蒼迷穀。出版社: 清华大学出版社。 阅读详情

相关推荐

DEV-C++调试设置

       昨天用C/C++去考了CSP,结果用DEV-C++调试总是闪退,按照我的记忆打开了调试参数,迷迷糊糊搞了一通,还是没办法调试,难受了几个小时。所以今天痛下决心,一定要写下DEV-C++设置调试的过程,警示自己! 解决步骤 1.打开DevC++找到上方工具栏 2.点击选择编译选项,再按下图所示设置即可

懒羊羊的快乐小屋 1007

POJ-2455-无向图网络流

题目大意:给定一张无向图,注意可能两点间可能有重边,一个人从地点1到地点n要有t次,问所有路中的最大值最小是多少; 题目解析:首先重边的话图就不可以用邻接矩阵来表示了,要用邻接表来表示,无向图的加边反向边不需要初始化为0应该和正向边一样(看成一对反向边即可);最大值的最小值直接二分即可; AC代码: #include #include #include #

zyz_3_14159的博客 1606

高通SA8295P音频接口深度解析:全面掌握SA8295P的LS-I2S、PCM/TDM与高性能音频处理技术设计

SA8295P提供丰富的音频接口选项,包括LS-I2S、PCM/TDM和HS-I2S接口,具备灵活的配置选项,适合各种高保真音频和高速数据传输应用。结合LS-I2S和PCM/TDM接口:在复杂的音频编解码器设计中,可结合使用LS-I2S和PCM/TDM接口,以处理和传输不同的音频数据流。使用HS-I2S接口:在软件定义无线电(SDR)系统中,高速I2S接口可处理高速数据流,如无线电信号的解码和处理。LS-I2S(低速I2S)接口是SA8295P的一部分,提供了丰富的音频数据传输选项。

weixin_43199439的博客 1353

POJ-2455(网络流)-无向图的处理

题意:有N个农场,P条无向路连接。要从1到N不重复走T条路,求所经过的直接连接两个区域的道路中最长道路中的最小值,。 构图:源点向1连容量T的边。二分最小长度,长度超过mid的边容量为0,否则为1,用最大流判可行性。 注意:1.该题有重边,切忌用邻接矩阵删除重边(重边要用邻接表来处理以保留)。2.无向图在addedge中要进行处理(处理方式见代码)。 View Code /*Sour...

weixin_30906185的博客 277

poj 2455(二分+最大流)

题意:有N个地点,FJ 想从1走到N ,每条边只能走一遍 走T次 求在满足条件下,求最大的边最小。 题意有点绕,简而言之就是要你找出T条每条边都边不重复的路径,使得的这T条路径中的每段路径的最大值最小,求出这个最大值。首先找出T条边不重复的路径,可以想到用增光路来搞,把每条边的权值赋值为1,那整个网络的最大流就是边不重复的路径的数目了,因为每条边的流量为1,最多只能在一条增广路上,所以最终由多少

LSS 524

poj 2455(二分+最大流)

题意:从1到n,要走不少于K条路,每条路不能重复走,点可以重复走,求所走的路中最长的最小,, 找出距离的最大值,然后二分,建图时符合的每条边链接的两点间建双向边,流量都为1,求最大流 #include #include const int N=210; const int inf=0x3fffffff; int dis[N],gap[N],head[N],num

菜鸟起航的专栏 790

poj 2455 Secret Milking Machine 二分+dinic求最大流

poj 2455 Secret Milking Machine 二分 + dinic求最大流 //poj 2455 Secret Milking Machine //二分 + 最大流 //题意: //输入第一行3个数为结点数,边数,路径数 //接下来为每条边的信息 //要求找出对应路径数中每条边都尽量小,输出这些路径中的边最长边为多少 //每条边只能用一次 //思路: ...

weixin_30338461的博客 111

POJ 2455 Secret Milking Machine二分+最大流

POJ 2455 Secret Milking Machine 题目链接 题意:一个无向图,要求有T条不重复道路可以从1走到t,问道路中最大边的最小值可以是多少 思路:二分+最大流二分长度,连起边,注意是无向图,所以反向边是有容量的,然后源点和1连容量t,n和汇点连容量是t 代码: #include #include #include #include us

Remilia's 1043

POJ 2455.Secret Milking Machine最大流+二分

<br />         这道题做了两个小时,做的我都快崩溃了。。。先是没有发现两个点之间可以有多条边,然后又忽略了是双向边,无比郁闷啊。看来读题也是一个能力啊,我太弱了。。。<br />         题目给出N个点和P条边,(两个点之间可能有多条边),然后问如果想要从1走到N走T次并且每条路只能走一次的话,求所走过的路中最长的边的最小值。<br />         我们可以用最大流来解决这个问题,首先考虑不重复的走T次,只需使每条路的容量为1就好,然后看容量能不能达到T。为了求最长边的最小值,我

minjie的专栏 1069

poj2455 Secret Milking Machine 秘密挤奶机(二分+最大流

原题链接:poj2455Secret Milking Machine 题目大意 题目说现在有n个点,p条边,每条边只能走一次,现在要从1号点到n号点走t次,求出所有走的边的最大值,使这个最大值最小。 思路 这是一道最小化最大值的题,一般一看到最大化最小值或最小化最大值这类的题,首先就要想到是二分(详细可以看这),然后我们就要判断答案是否有二段性或单调性来判断能否二分。 首先我们设答案在[l , r]区间内,假设一个值x,我们只用长度小于x的边,也可以从1到n走t次,然后答案肯定在[l , x]区间内,我们

harry12138小白的博客 2055

POJ 2455 Secret Milking Machine(二分答案+最大流)

感谢怀哥提供的经典好题,让我学会了二分答案这个思想!//二分答案+最大流 //终于见识到传说中的二分答案这个方法了 //如果没有二分答案这个提示,这道题我怎么也不会往最大流去想 //思路是这样的,将所有边权值排序,记录边权值的上界和下界 //接着开始二分答案,依照枚举的这个答案构图,即将边权值最大值小于等于枚举的这个答案的边加进图中 //(双向边)并将他们的容量设为1,有多重边就将容量再+1,接着FF最大流,如果最大流>=T,则说明答案是满足条件的 //记住此时未必是正确答案,答案还可以再小。继

Czy 1762

POJ 2455 Secret Milking Machine (二分答案+最大流)

本题乃网络流一大水题,但也有值得总结的地方。DescriptionFarmer John is constructing a new milking machine and wishes to keep it secret as long as possible. He has hidden in it deep within his farm and needs to be able to get

Ab.Ever 1121

poj 2455 Secret Milking Machine 二分+最大流

题意: 给一图,求从点1到n的t条边不相交的路径,目标是最小化最t条路径中的最大边,输出该最大边。 分析: 求最值的问题满足单调性都可以用二分来做,二分是加速的枚举方法。这题二分枚举最大边建图,每次用长度小于等于二分值的边建图并置容量为1,求最大流即可。 代码: //poj 2455 //sep9 #include #include #include using namespace

sepNINE的专栏 841

Secret Milking Machine POJ - 2455 二分最大流

Farmer John is constructing a new milking machine and wishes to keep it secret as long as possible. He has hidden in it deep within his farm and needs to be able to get to the machine without being de...

superkunn的博客 257

POJ 2455--Secret Milking Machine二分枚举 && 最大流 && 经典】

Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10625   Accepted: 3111 Description Farmer John is constructing a new milking machine

_阿阿阿阿欢 1042

POJ 2455Secret Milking Machine二分+网络流之最大流

题目地址:POJ2455 手残真浪费时间啊。。又拖到了今天才找出了错误。。每晚两道题不知不觉又变回了每晚一道题、。。sad。。 第一次在isap中忘记调用bfs,第二次则是遍历的时候居然是从1开始遍历的。。。sad。。。 这题思路倒是很简单,就是有一个比较坑的地方,就是这里的重边要当两条边来用,以前受最短路什么的影响,直接把慢的删了,很明显不对。。。这里的两条重边都是可以走的。 建图思路是

scf0920 1560

poj2455 Secret Milking Machine二分答案+最大流

二分答案,双向边网络流,反向边容量直接设为val即可。可以选择的边容量为1,跑最大流,看是否满流(是否存在K条路径)。

Icefox的博客 422

POJ 2455 Secret Milking Machine 最大流 二分答案

源汇为1,n的无向图求最小的路径上最大边使存在T条不重叠的路连通源汇。显然二分答案最大边长,判定时只加入满足最大边长的边。注意是无向边。。数据:http://contest.usaco.org/FEB05_6.htm#include <cstdio> #include <cstring> #include <algorithm> #define FOR(i,j,k) for(i=j;i<=k;++i

とある黄鱼のOIブログ 785

POJ-2455 Secret Milking Machine 二分+最大流

  题目链接:http://poj.org/problem?id=2455   题意有点绕,简而言之就是要你找出T条每条边都边不重复的路径,使得的这T条路径中的每段路径的最大值最小,求出这个最大值。首先找出T条边不重复的路径,可以想到用增光路来搞,把每条边的权值赋值为1,那整个网络的最大流就是边不重复的路径的数目了,因为每条边的流量为1,最多只能在一条增广路上,所以最终由多少个可行流就有多少条边...

weixin_30580341的博客 106
上一篇: hdu 3996 Gold Mine【最大权闭包-----最小割最大流Dinic】
下一篇: hdu 1281 棋盘游戏【二分匹配+暴力枚举】
mengxiang000000
博客等级 码龄11年 627粉丝 2116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值