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

来源:互联网 发布:java得到项目根目录 编辑:程序博客网 时间:2024/06/06 01:40

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

#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 210inline int read(){    int x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();    return x*f;}int n,m,K,h[N],num=1,lev[N],T=201,cur[N];struct edge{    int to,next,val;}data[90000];struct Edge{    int x,y,val;}e[40010];inline bool cmp(Edge x,Edge y){return x.val<y.val;}inline void add(int x,int y,int val){    data[++num].to=y;data[num].next=h[x];h[x]=num;data[num].val=val;    data[++num].to=x;data[num].next=h[y];h[y]=num;data[num].val=val;}inline bool bfs(){    queue<int>q;memset(lev,0,sizeof(lev));    q.push(0);lev[0]=1;    while(!q.empty()){        int x=q.front();q.pop();        for(int i=h[x];i;i=data[i].next){            int y=data[i].to;if(lev[y]||!data[i].val) continue;            lev[y]=lev[x]+1;q.push(y);        }    }return lev[T];}inline int dinic(int x,int low){    if(x==T) return low;int tmp=low;    for(int i=h[x];i;i=data[i].next){        int y=data[i].to;if(lev[y]!=lev[x]+1||!data[i].val) continue;        int res=dinic(y,min(tmp,data[i].val));        if(!res) lev[y]=0;else tmp-=res,data[i].val-=res,data[i^1].val+=res;        if(!tmp) return low;    }return low-tmp;}inline bool jud(int mid){    memset(h,0,sizeof(h));num=1;int ans=0;    add(0,1,K);add(n,T,K);    for(int i=1;i<=m;++i)        if(e[i].val<=mid) add(e[i].x,e[i].y,1);    while(bfs()){memcpy(cur,h,sizeof(cur));ans+=dinic(0,inf);}    return ans==K;}int main(){//  freopen("a.in","r",stdin);    n=read();m=read();K=read();    for(int i=1;i<=m;++i) e[i].x=read(),e[i].y=read(),e[i].val=read();    sort(e+1,e+m+1,cmp);    int l=1,r=1e6;    while(l<=r){        int mid=l+r>>1;        if(jud(mid)) r=mid-1;        else l=mid+1;    }printf("%d\n",r+1);    return 0;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 旋转快捷键 旋转蒸发仪 旋转吧假期 旋转的定义 旋转怎么读 旋转图片 旋转屏幕 旋转的拼音 旋转英文 旋转跳跃 水平旋转 旋转 英文 旋转英语 旋转的英文 旋转轮胎mod 塞震动棒坐旋转木马 刮弄顶端旋转磨啊舒爽 手指旋转抽动 旋转轮胎手机版 旋转跳跃我闭着眼 电动旋转木马玩具肉 旋转跑完马拉松 旋转木马图片 顶入稚嫩旋转磨弄交替 ipad屏幕旋转 旋转木马简笔画 医生巨大旋转碾磨 旋转轮胎重卡中文版 旋转楼梯尺寸 屏幕旋转怎么设置 屏幕旋转软件 旋转轮胎中文版手机版 旋转的近义词 旋转的读音是什么 旋转轮胎中文版 爸爸抵在墙上深深埋入旋转 公公抵在墙上深深埋入旋转 旋钮开关 旋钮 旋钮编码器 旋钮手柄