双倍经验题:HDU 6214,3987

求最小割的最小边。

方案一:

首先跑最大流,这个时候割上都满载了,于是将满载的边 cap = 1,其他 inf ,再跑最大流,这个时候限定这个网络的关键边就是那个最少边的那个割。

方案二:

奇技淫巧,将每条边 cap* A + 1,最大流 = flow / A ,最小割边 = fow % A;

原理:每条边容量扩大 到 cap * A + 1,那么最大流也一定扩大到 *A + 1,原图是多解,但是新图,

例如最少边的个是2条边,那么他就扩大到了 *A + 2,其他的就更大,那么就变成唯一解了。

#include <bits/stdc++.h>

using namespace std;

const int maxn = ;
const long long INF = 0x3f3f3f3f3f3f3f3f; struct Edge
{
int from,to;
long long cap,flow;
}; struct Dinic
{
int n,m,s,t;
vector<Edge> edge;
vector<int> G[maxn];
bool vis[maxn];
int d[maxn];
int cur[maxn]; void init()
{
for(int i=;i<maxn;i++)
G[i].clear();
edge.clear();
} void AddEdge (int from,int to,long long cap)
{
edge.push_back((Edge){from,to,cap,});
edge.push_back((Edge){to,from,,});
m = edge.size();
G[from].push_back(m-);
G[to].push_back(m-);
} bool BFS()
{
memset(vis,,sizeof(vis));
queue<int> Q;
Q.push(s);
d[s] = ;
vis[s] = ;
while(!Q.empty())
{
int x = Q.front();
Q.pop();
for(int i=; i<(int)G[x].size(); i++)
{
Edge & e = edge[G[x][i]];
if(!vis[e.to]&&e.cap>e.flow)
{
vis[e.to] = ;
d[e.to] = d[x] + ;
Q.push(e.to);
}
}
}
return vis[t];
} long long DFS(int x,long long a)
{
if(x==t||a==) return a;
long long flow = ,f;
for(int & i = cur[x]; i<(int)G[x].size(); i++)
{
Edge & e = edge[G[x][i]];
if(d[x] + ==d[e.to]&&(f=DFS(e.to,min(a,e.cap-e.flow)))>)
{
e.flow +=f;
edge[G[x][i]^].flow -=f;
flow +=f;
a-=f;
if(a==) break;
}
}
return flow;
} long long Maxflow (int s,int t) {
this->s = s;this->t = t;
long long flow = ;
while(BFS()) {
memset(cur,,sizeof(cur));
flow+=DFS(s,INF);
}
return flow;
}
}sol; int main()
{
int T;
scanf("%d",&T); for(int z = ; z <= T; z++) {
int n,m;
scanf("%d%d",&n,&m);
int s,t;
scanf("%d%d",&s,&t);
s--;
t--;
sol.init();
for(int i = ; i < m; i++) {
int u,v; long long c;
scanf("%d%d%I64d",&u,&v,&c);
u--;
v--;
sol.AddEdge(u,v,c*+);
} printf("%lld\n",sol.Maxflow(s,t)%);
} return ;
}

HDU 6214 最小割边的更多相关文章

  1. HDU - 6214:Smallest Minimum Cut(最小割边最小割)

    Consider a network G=(V,E) G=(V,E) with source s s and sink t t . An s-t cut is a partition of nodes ...

  2. HDU 6214.Smallest Minimum Cut 最少边数最小割

    Smallest Minimum Cut Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Oth ...

  3. hdu 6214 Smallest Minimum Cut[最大流]

    hdu 6214 Smallest Minimum Cut[最大流] 题意:求最小割中最少的边数. 题解:对边权乘个比边大点的数比如300,再加1 ,最后,最大流对300取余就是边数啦.. #incl ...

  4. HDU 6214 Smallest Minimum Cut 最小割,权值编码

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6214 题意:求边数最小的割. 解法: 建边的时候每条边权 w = w * (E + 1) + 1; 这 ...

  5. HDU 6214 Smallest Minimum Cut(最少边最小割)

    Problem Description Consider a network G=(V,E) with source s and sink t. An s-t cut is a partition o ...

  6. Smallest Minimum Cut HDU - 6214(最小割集)

    Smallest Minimum Cut Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Oth ...

  7. HDU 6214 Smallest Minimum Cut (最小割且边数最少)

    题意:给定上一个有向图,求 s - t 的最小割且边数最少. 析:设边的容量是w,边数为m,只要把每边打容量变成 w * (m+1) + 1,然后跑一个最大流,最大流%(m+1),就是答案. 代码如下 ...

  8. HDU 6214 Smallest Minimum Cut 【网络流最小割+ 二种方法只能一种有效+hdu 3987原题】

    Problem Description Consider a network G=(V,E) with source s and sink t . An s-t cut is a partition ...

  9. hdu 6214 Smallest Minimum Cut(最小割的最少边数)

    题目大意是给一张网络,网络可能存在不同边集的最小割,求出拥有最少边集的最小割,最少的边是多少条? 思路:题目很好理解,就是找一个边集最少的最小割,一个方法是在建图的时候把边的容量处理成C *(E+1 ...

随机推荐

  1. 转帖 最全的HTML、CSS知识点总结,浅显易懂

    一,html+css基础1-1Html和CSS的关系学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的:1. HTML是网页 ...

  2. js动态实现时分秒

    <div id="time" style="color: #96C2DD;</div>      <script type="text/ ...

  3. zabbix 自定义监控

    一,自定义监控 自定义key能被server和agent认可, zabbix_get -s 172.16.1.6 -p 10050 -k "system.cpu.load[all,avg1] ...

  4. [转]win7 如何升级PowerShell

    本文转自:http://www.cnblogs.com/wenBlog/p/6198354.html 背景: 开发的PowerShell 脚本需要使用Invoke-RestMethod命令,发现在老的 ...

  5. 拼凑的宿主-host

    开发两年之久,竟然不知道host这个词是什么意思.前些天有幸遇到了,就跟别人请教了.今天理絮一下.总比不知道强吧. 白话来说宿主就是一些框架运行机制运行时需要依赖的平台. 例如web开发常用的IIS, ...

  6. C# ADO.NET

    ADO.NET 作业总结难点 数据库语句掌握太差 //查询 select * from Users //查询表中所有数据 select * from Users where UserName = 'l ...

  7. 阿里云 linux 系统的架构

    简单说,/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的. /lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件.目录 /usr/lib ...

  8. 学习canvas

    canvas简介 ​ <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素.它可以用来制作照片集或者制作简单(也不是那么 ...

  9. vector/list/set/map 遍历耗时统计

    #include<Windows.h> #include <iostream> #include<fstream> #include<vector> # ...

  10. AMOLED原理介紹

    1. OLED发光原理 OLED(Organic Light Emitting Display,有机发光显示器)是指有机半导体材料在电场驱动下,通过载流子注入和复合导致发光的现象.其基本原理是用ITO ...