hdu3987,最小割时求最少割边数

针对大规模数据集,探讨如何在保证最小割的同时,求解最少割边数的问题。总流量达到10W*1000,需要考虑整数溢出的可能性。
摘要由CSDN通过智能技术生成
题意:求最小割时候割边最少的数量。算法:先求dinic一遍,跑出残网络,再把该网络中满流量(残量为0)的边
残量改为1,其他边残量改为无穷,则再跑一次最大流,所得即为答案。(思,最小割有喝多组,但是要割边数量最少
的,那么把满流的流量改为1,再跑一次最大流即可)。
未1A原因:
1*:添加边的时候,把双向边添加为一条(反向的流量上限==正向),这样不是不可以,但是由于后面用到要取有效边
(非后悔边,边编号比为偶数),导致错误,改为添加俩次即可。

2//:数据较大,总流量10W*1000,可能暴int。


#include<iostream>  //98ms
#include<cstdio>
#include<queue>
using namespace std;
long long e[400001][3];int head[1100];const int inf=0x3f3f3f3f;
int n,m;int nume;
void addedge(int from,int to,int w,int derect)  //添加边的函数,derect为1时要添加双向边
{
    e[nume][0]=to; e[nume][1]=head[from];head[from]=nume;
    e[nume++][2]=w;
    e[nume][0]=from; e[nume][1]=head[to];hea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值