假设不须要求边的个数的话,就是一个裸的最小割问题。

求边的个数就用边的权值记录一下。

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include<queue>
using namespace std;
#define INF 99999999
#define LL long long
const LL maxn =55;
const LL maxm =4400;
const LL oo = (LL)1<<37;
struct Arclist
{
LL cnt, head[maxn], dis[maxn];
LL cur[maxn], pre[maxn], gap[maxn], aug[maxn];
struct node
{
LL u, v, w, next;
}edge[maxm];
void init()
{
cnt = 0;
memset(head,-1,sizeof(head));
}
void add(LL u, LL v, LL w)
{
// cout<<u<<" "<<v<<" "<<w<<endl;
edge[cnt].u = u;
edge[cnt].v = v;
edge[cnt].w = w;
edge[cnt].next = head[u];
head[u] = cnt++;
edge[cnt].u = v;
edge[cnt].v = u;
edge[cnt].w = 0;
edge[cnt].next = head[v];
head[v] = cnt++;
}
LL sap(LL s, LL e, LL n)
{
LL max_flow = 0, u = s;
LL mindis;
for(LL i = 0; i <= n; i++)
{
cur[i] = head[i];
dis[i] = 0;
gap[i] = 0;
}
aug[s] = oo;
pre[s] = -1;
gap[0] = n;
while(dis[s]<n)
{
bool flag = false;
if(u==e)
{
max_flow += aug[e];
for(LL v = pre[e]; v != -1; v = pre[v])
{
LL id = cur[v];
edge[id].w -= aug[e];
edge[id^1].w += aug[e];
aug[v] -= aug[e];
if(edge[id].w==0) u = v;
}
}
for(LL id = cur[u]; id != -1; id = edge[id].next)
{
LL v = edge[id].v;
if(edge[id].w>0 && dis[u]==dis[v]+1)
{
flag = true;
pre[v] = u;
cur[u] = id;
aug[v] = std::min(aug[u], edge[id].w);
u = v;
break;
}
}
if(flag==false)
{
if(--gap[dis[u]]==0) break;
mindis = n;
cur[u] = head[u];
for(LL id = head[u]; id != -1; id = edge[id].next)
{
LL v = edge[id].v;
if(edge[id].w>0 && dis[v]<mindis)
{
mindis = dis[v];
cur[u] = id;
}
}
dis[u] = mindis+1;
++gap[dis[u]];
if(u!=s) u = pre[u];
}
}
return max_flow;
}
}G;
int main()
{
LL m,n,u,v,w,T,st,ed;
scanf("%lld",&T);
while(T--)
{
scanf("%lld%lld%lld%lld",&n,&m,&st,&ed);
G.init();
LL all=0;
while(m--)
{
scanf("%lld%lld%lld",&u,&v,&w);
G.add(v,u,w*1000+1);
G.add(u,v,w*1000+1);
all+=w;
}
LL w=G.sap(st,ed,n);
// cout<<w<<endl;
if(w==0)cout<<"Inf"<<endl;
else
{
double x,y;
if(w%1000==0)
{
y=1000;
w=w-1000;
}
else y=w%1000;
x=all-w/1000;
printf("%.2f\n",1.0*x/y);
}
}
return 0;
}

zoj-3792-Romantic Value-最小割+数值转化的更多相关文章

  1. ZOJ 3792 Romantic Value 最小割(最小费用下最小边数)

    求最小割及最小花费 把边权c = c*10000+1 然后跑一个最小割,则flow / 10000就是费用 flow%10000就是边数. 且是边数最少的情况.. #include<stdio. ...

  2. tyvj P1209 - 拦截导弹 平面图最小割&&模型转化

    P1209 - 拦截导弹 From admin    Normal (OI)总时限:6s    内存限制:128MB    代码长度限制:64KB 背景 Background 实中编程者联盟为了培养技 ...

  3. ZOJ 2676 Network Wars ★(最小割算法介绍 && 01分数规划)

    [题意]给出一个带权无向图,求割集,且割集的平均边权最小. [分析] 先尝试着用更一般的形式重新叙述本问题.设向量w表示边的权值,令向量c=(1, 1, 1, --, 1)表示选边的代价,于是原问题等 ...

  4. ZOJ 2587 Unique Attack (最小割唯一性)

    题意 判断一个无向图的割是否唯一 思路 错误思路:一开始想的是判断割边是否都是关键割边,那既然割边两端点能连通S.T点的边是关键边,那么只要遇到有某个边两端点不连通S or T则这条边就不是关键割边( ...

  5. zoj 3792 Romantic Value

    题目链接 求最小割的值, 以及割边最少的情况的边数. 先求一遍最小割, 然后把所有割边的权值变为1, 其他边变成inf, 在求一遍最小割, 此时求出的就是最少边数. Inf打成inf  WA了好几发. ...

  6. zoj 2587 Unique Attack 最小割判定

    题目链接 让你判断最小割是否唯一. 判断方法是, 先求一遍最大流, 然后从源点dfs一次, 搜索未饱和边的数目. 从汇点dfs一次, 同样也是搜索未饱和边的数目, 看总和是否等于n. 如果等于n那么唯 ...

  7. zoj 2532 Internship【最小割】

    就是求哪些边在最大流上满流,也就是找割边.把0作为t点,s向所有的1~n连流量为inf的边,其他的边按照流量连.跑一遍最大流,从s顺着有残余流量的正向边dfs打标记fr,从t顺着正向边有残余流量的反向 ...

  8. Atcoder Regular Contest 125 E - Snack(最小割转化+贪心)

    Preface: 这是生平第一道现场 AC 的 arc E,也生平第一次经历了 performance \(\ge 2800\)​,甚至还生平第一次被 hb 拉到会议里讲题,讲的就是这个题,然鹅比较尬 ...

  9. HDU 4289:Control(最小割)

    http://acm.hdu.edu.cn/showproblem.php?pid=4289 题意:有n个城市,m条无向边,小偷要从s点开始逃到d点,在每个城市安放监控的花费是sa[i],问最小花费可 ...

随机推荐

  1. SharePoint Server 2010 删除Web应用

    SharePoint Server 2010 删除Web应用         因为之前的测试.在SharePointserver创建于非常多Web应用(我是在本机Win7系统上安装的SharePoin ...

  2. Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程

    原文:Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程 Red Gate系列之一 SQL Compare 10.4.8.87 E ...

  3. mysql多实例的配置(转)

    1.创建多实例的目录: mkdir -p /data/mysql/mysql_3307/{data,tmp,logs} mkdir -p /data/mysql/mysql_3308/{data,tm ...

  4. LightOj 1148 Basic Math

    1148 - Mad Counting PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 32 MB Mob ...

  5. add-apt-repository

    也许你早已注意到,我们在介绍软件的时候,在安装这块一般都提供 PPA 源安装方式,这是一种快速方便的软件安装方法,但对于一些新手来说,对 PPA 并不是很熟悉,下面我们就详细介绍一下. # 我们先了解 ...

  6. 演示基于SDL2.0+FFmpeg的播放器

    SDL是一个跨平台的渲染组件,眼下已经推出到2.0.3版本号,支持Win/Linux/OSX/Android.网上非常多介绍大多是基于SDL1.2版本号的,与2.0版本号有一定的区别,本文演示怎样用S ...

  7. Socket规划(1)

    socket定义 于Linux网络编程是通过socket进行的. 人们常说的socket是一种特殊的I/O接口,他也是一个文件描写叙述符.socket是一种经常使用的进程之间通信机制,通过它不仅能实现 ...

  8. 【屌丝程序的口才逆袭演讲稿50篇】第十篇:程序猿们请看看外面的世界吧【张振华.Jack】

    演讲稿主题:<程序猿们请看看外面的世界吧>                      --作者:张振华Jack     大家都知道我是一个程序猿.几年下来认识了最典型的三个程序猿.     ...

  9. TCP拥塞控制 (1)

    Basic: TCP,传输控制协定,它是目前最广泛使用的网络传输协议.SMTP.SSH.FTP.HTTP等因特网底层协议均是TCP. TCP面向连接,提供端到端的数据可靠传输.连接时三次握手.断开是四 ...

  10. SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

    原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...