Description

link

题意概述:给一张图,每条边有边权,求让点 \(1\) 和点 \(n\) 不连通的“最小破坏边权和” 和 “在此基础上的最小破坏边数”

边数 \(\leq 1000\) ,点数 \(\leq 32\)

Solution

\[Begin
\]

其实看出来这个可以用最小割做挺显然的

然后第二问的做法就有点点技巧了

我们把图中的每一条边的边权 \(w_i\) 转化成 \(a \times w_i+1\)

其中\(a\) > \(1000\)

然后我们跑最大流,求得的 \(ans/a\) 就是最小割,然后 \(ans \% a\) 就是边数

这里特别好理解的

\[Finish
\]

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace yspm{
inline int read()
{
int res=0,f=1; char k;
while(!isdigit(k=getchar())) if(k=='-') f=-1;
while(isdigit(k)) res=res*10+k-'0',k=getchar();
return res*f;
}
const int N=1e4+10,M=1e5+10;
struct node{int nxt,to,lim;}e[M<<1];
int head[N],dep[N],ans,s,t,cnt=1,n,m,a=1002;
inline void add(int u,int v,int w)
{
e[++cnt].nxt=head[u],e[cnt].lim=w; e[cnt].to=v;
return head[u]=cnt,void();
}
queue<int>q;
inline bool bfs()
{
memset(dep,-1,sizeof(dep)); dep[s]=0;
while(q.size()) q.pop(); q.push(s);
while(!q.empty())
{
int fr=q.front(); q.pop();
for(int i=head[fr];i;i=e[i].nxt)
{
int tr=e[i].to;
if(dep[tr]==-1&&e[i].lim) dep[tr]=dep[fr]+1,q.push(tr);
}
}
return dep[t]!=-1;
}
inline int dfs(int now,int in)
{
if(now==t) return in; int out=0;
for(int i=head[now];i&&in;i=e[i].nxt)
{
int tr=e[i].to;
if(e[i].lim&&dep[tr]==dep[now]+1)
{
int res=dfs(tr,min(in,e[i].lim));
in-=res; out+=res; e[i].lim-=res;
e[i^1].lim+=res;
}
} if(!out) dep[now]=-1; return out;
}
signed main()
{
n=read(),m=read(); s=1,t=n;
for(int i=1,u,v,w;i<=m;++i)
{
u=read(); v=read(); w=read();
add(u,v,w*a+1); add(v,u,0);
}
while(bfs()) ans+=dfs(s,1e17);
printf("%lld %lld\n",ans/a,ans%a);
return 0;
}
}
signed main(){return yspm::main();}

没怎么压行,应该挺可读的

LGOJ1344 追查坏牛奶的更多相关文章

  1. 【Luogu1344】追查坏牛奶(最小割)

    [Luogu1344]追查坏牛奶(最小割) 题面 洛谷 题解 裸的最小割,但是要求边的数量最小. 怎么办呢?给每条边的权值额外加上一个很大的值就了. #include<iostream> ...

  2. 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control 解题报告

    P1344 [USACO4.4]追查坏牛奶Pollutant Control 题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候 ...

  3. USACO Section 4.4 追查坏牛奶Pollutant Control

    http://www.luogu.org/problem/show?pid=1344 题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件 ...

  4. 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control

    题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网.这个送货网很大,而且关系复杂.你知道这批牛 ...

  5. USACO 4.4.2 追查坏牛奶 oj1341 网络流最小割问题

    描述 Description 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网.这个送货网很大,而且关 ...

  6. 【COGS】894. 追查坏牛奶

    http://cojs.tk/cogs/problem/problem.php?pid=894 题意:n个点m条边的加权网络,求最少边数的按编号字典序最小的最小割.(n<=32, m<=1 ...

  7. 【题解】Luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control

    原题传送门 看到这种题,应该一眼就能知道考的是最小割 没错这题就是如此简单,跑两遍最大流(最小割=最大流),一次边权为题目所给,一次边权为1 还有一种优化,优化后只需跑一次最大流,把每条边的权值改成w ...

  8. Luogu1344 追查坏牛奶 最小割

    题目传送门 题意:给出$N$个节点$M$条边的有向图,边权为$w$,求其最小割与达到最小割的情况下割掉边数的最小值.$N \leq 32,M \leq 1000,w\leq 2 \times 10^6 ...

  9. luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control

    传送门 要求断掉某些边使得两个点不连通,显然是最小割 但是要求选的边数尽量少,,, 可以考虑修改边权(容量),即把边权\(c\)改成\(c*(m+1)+1\) 没了 // luogu-judger-e ...

随机推荐

  1. Java 统计整数二进制中1的个数

    package cookie; public class CountBinary_1 { public static void main(String[] args) { System.out.pri ...

  2. js 工厂设计模式

    class Product{ constructor(name){ this.name = name; } init(){ alert(this.name); } } function Creator ...

  3. Day 21:网络编程(2)

    以课程中feiQ为例,feiQ作为一个典型的网络编程应用,用一段代码尝试给自己的发送消息 import java.io.IOException; import java.net.DatagramPac ...

  4. windows driver 枚举串口

    //枚举串口 NTSTATUS status; HANDLE hKey = NULL; OBJECT_ATTRIBUTES oa; UNICODE_STRING strPath = RTL_CONST ...

  5. 洛谷 P1833 樱花

    题目传送门 解题思路: 就是完全背包和多重背包的混合.处理时间的时候注意一下就行了 AC代码: #include<iostream> #include<cstdio> usin ...

  6. java虚拟机之JVM生命周期

    java生命周期分为以下三部分:启动,运行,消亡. 启动.启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的 ...

  7. Frequently arduino function

    unctions                                                     功能if(Serial)                           ...

  8. java课程之团队开发冲刺阶段2.6

    总结昨天进度: 1.总体的思路已经完成,代码也差不多了,只剩下对闹钟activity的设置 遇到的困难: 1.在设置震动的时候,对方法有点不太理解,所以使用的时候产生了错误,没有达到预期的效果 今天的 ...

  9. git修改已经push的commit message

    git中修改上一次提交的commit的message git commit --amend -m "你的新的注释" git push -f 多个commit https://www ...

  10. Maven - 构建生命周期、阶段、目标

    版权所有,未经授权,禁止转载 章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Ma ...