【HDOJ6582】Path(最短路图,最小割)
题意:
n,m<=1e4,c<=1e9
思路:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
#define N 110000
#define M 1100000
#define fi first
#define se second
#define MP make_pair
#define pi acos(-1)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define ls p<<1
#define rs p<<1|1 const int MOD=1e9+;
double eps=1e-;
ll INF=1e14; priority_queue<pair<ll,int> > q; ll dis[N],dis1[N],dis2[N];
int head[N],vet[N],nxt[N],len[N],vis[N],fan[N],gap[N],n,m,tot,S,T,s; struct arr
{
int x,y,z;
}a[N]; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} void add(int a,int b,int c)
{
nxt[++tot]=head[a];
vet[tot]=b;
len[tot]=c;
head[a]=tot;
} void Add(int a,int b,int c)
{
nxt[++tot]=head[a];
vet[tot]=b;
len[tot]=c;
head[a]=tot; nxt[++tot]=head[b];
vet[tot]=a;
len[tot]=;
head[b]=tot;
} void dijk(int st,int op)
{
mem(vis,);
rep(i,,n) dis[i]=1e13;
while(!q.empty()) q.pop();
q.push(MP(,st)); dis[st]=;
while(!q.empty())
{
int u=q.top().se;
q.pop();
if(vis[u]) continue;
vis[u]=;
int e=head[u];
while(e)
{
int v=vet[e];
if(dis[u]+len[e]<dis[v])
{
dis[v]=dis[u]+len[e];
q.push(MP(-dis[v],v));
}
e=nxt[e];
}
}
if(op==)
{
rep(i,,n) dis1[i]=dis[i];
}
else
{
rep(i,,n) dis2[i]=dis[i];
}
} ll dfs(int u,int aug)
{
if(u==T) return aug;
int e=head[u],flow=;
ll val=s-;
while(e)
{
int v=vet[e];
if(len[e])
{
if(dis[u]==dis[v]+)
{
int t=dfs(v,min(len[e],aug-flow));
len[e]-=t;
len[fan[e]]+=t;
flow+=t;
if(dis[S]>=s) return flow;
if(aug==flow) break;
}
val=min(val,dis[v]);
}
e=nxt[e];
}
if(!flow)
{
gap[dis[u]]--;
if(!gap[dis[u]]) dis[S]=s;
dis[u]=val+;
gap[dis[u]]++;
}
return flow;
} ll maxflow()
{
mem(gap,);
mem(dis,);
gap[]=s;
ll ans=;
while(dis[S]<s) ans+=dfs(S,INF);
return ans;
} int main()
{
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
rep(i,,)
if(i&) fan[i]=i+;
else fan[i]=i-;
int cas=read();
while(cas--)
{
n=read(),m=read();
rep(i,,m)
{
a[i].x=read();
a[i].y=read();
a[i].z=read();
}
tot=;
rep(i,,n) head[i]=;
rep(i,,m) add(a[i].x,a[i].y,a[i].z);
dijk(,);
tot=;
rep(i,,n) head[i]=;
rep(i,,m) add(a[i].y,a[i].x,a[i].z);
dijk(n,);
tot=;
rep(i,,n) head[i]=;
rep(i,,m)
if(dis1[a[i].x]+a[i].z+dis2[a[i].y]==dis1[n])
Add(a[i].x,a[i].y,a[i].z); S=; T=n; s=n;
ll ans=maxflow();
printf("%I64d\n",ans);
}
return ;
}
【HDOJ6582】Path(最短路图,最小割)的更多相关文章
- bzoj1266 [AHOI2006]上学路线route floyd建出最短路图+最小割
1266: [AHOI2006]上学路线route Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2490 Solved: 898[Submit][S ...
- hdu3870 基于最短路的最小割
题意: 给你一个平面图,让你输出(1,1),(n ,n)的最小割.. 思路: 看完题想都没想直接最大流,结果TLE,想想也是 G<400*400,400*400*4> ...
- hdu 5294 Tricks Device 最短路建图+最小割
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...
- bzoj 1001 平面图转对偶图 最短路求图最小割
原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1001 整理了下之前A的题 平面图可以转化成对偶图,然后(NlogN)的可以求出图的最小割( ...
- UVALive 3661 Animal Run(最短路解最小割)
题意:动物要逃跑,工作人员要截断从START(左上角)到END(右下角)的道路,每条边权表示拦截该条道路需要多少工作人员.问最少需要多少人才能完成拦截. 通俗地讲,就是把图一分为二所造成消耗的最小值. ...
- hdu-5889-最短路+网络流/最小割
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- SPOJ-OPTM Optimal Marks ★★(按位建图 && 最小割)
[题意]给出一个无向图,每个点有一个标号mark[i],不同点可能有相同的标号.对于一条边(u, v),它的权值定义为mark[u] xor mark[v].现在一些点的标号已定,请决定剩下点的标号, ...
- POJ 2987 Firing【最大权闭合图-最小割】
题意:给出一个有向图,选择一个点,则要选择它的可以到达的所有节点.选择每个点有各自的利益或损失.求最大化的利益,以及此时选择人数的最小值. 算法:构造源点s汇点t,从s到每个正数点建边,容量为利益.每 ...
- BZOJ 1001: [BeiJing2006]狼抓兔子(s-t平面图+最短路求最小割)
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 题意: 思路:这道题目是最小割题目,但是吧你直接套用Dinic是会超时的. 这里有种很奇妙的做 ...
- [luoguP2762] 太空飞行计划问题(最大权闭合图—最小割—最大流)
传送门 如果将每一个实验和其所对的仪器连一条有向边,那么原图就是一个dag图(有向无环) 每一个点都有一个点权,实验为收益(正数),仪器为花费(负数). 那么接下来可以引出闭合图的概念了. 闭合图是原 ...
随机推荐
- C#-概念-基础类库:基础类库
ylbtech-C#-概念-基础类库:基础类库 基础类库 (BCL) 是微软所提出的一组标准库可提供.NET Framework所有语言使用. 随着 Windows 以及 .NET Framework ...
- Vagrant 手册之 Vagrantfile - 机器设置 config.vm
原文地址 配置的命名空间:config.vm config.vm 中的设置修改 Vagrant 管理的机器的配置. 1. 可用的设置项 config.vm.boot_timeout Vagrant 等 ...
- JSP基础--三大指令
JSP指令 1 JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的. JSP中 ...
- "源文件名长度大于文件系统支持的长度无法删除"的解决方案
import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; /** * @auth ...
- Erueka异常
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | ...
- HRESULT是什么类型
HRESULT 是一种简单的数据类型,可以判断函数执行的结果.HRESULT 常被用作COM调用的返回值.充分利用HRESULT返回信息可以帮助提高我们的代码质量,提供程序的健壮性. HRESULT ...
- Tensorflow机器学习入门——MINIST数据集识别
参考网站:http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html #自动下载并加载数据 from tensorflow.example ...
- 开源企业IM-免费企业即时通讯-ENTBOOST V2014.183 Linux版本号正式公布
版权声明:本文为博主原创文章,欢迎转载,转载请尽量保持原文章完整,谢谢! https://blog.csdn.net/yanghz/article/details/37807975 ENTBOOST, ...
- Windows组决策
https://blog.csdn.net/wangjunjun2008/article/details/82426587
- redis命令行命令
配置文件设置密码认证 修改redis.conf去掉#requirepass foobared前面的#,foobared就是密码,可以进行修改 redis命令设置密码认证config set requi ...