【最短路】【最大流】bzoj3931 [CQOI2015]网络吞吐量
跑出最短路图,然后把结点拆点跑最大流。
#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define M 100001
#define INF 2147483647
#define N 501
typedef long long ll;
namespace Net
{
int v[M<<1],next[M<<1],first[N<<1],en,cap[M<<1];
queue<int>q;
void AddEdge(int U,int V,int Cap)
{
v[en]=V; cap[en]=Cap; next[en]=first[U]; first[U]=en++;
v[en]=U; next[en]=first[V]; first[V]=en++;
}
int S,T,n;
int d[N<<1],cur[N<<1];
int bfs()
{
memset(d,-1,sizeof(int)*(n+1));
d[S]=0;
q.push(S);
while(!q.empty())
{
int U=q.front(); q.pop();
for(int i=first[U];i!=-1;i=next[i])
if(cap[i]&&d[v[i]]==-1)
{
d[v[i]]=d[U]+1;
q.push(v[i]);
}
}
return d[T]!=-1;
}
int dfs(int U,int a)
{
if(U==T||(!a))
return a;
int f,Flow=0;
for(int &i=cur[U];i!=-1;i=next[i])
if(d[v[i]]==d[U]+1&&(f=dfs(v[i],min(a,cap[i]))))
{
cap[i]-=f; cap[i^1]+=f;
Flow+=f; a-=f;
if(!a) break;
}
if(!Flow) d[U]=-1;
return Flow;
}
ll MaxFlow()
{
ll Flow=0;
int tmp;
while(bfs())
{
memcpy(cur,first,sizeof(int)*(n+1));
while(tmp=dfs(S,INF))
Flow+=(ll)tmp;
}
return Flow;
}
};
namespace SP
{
int n,m;
queue<int>q;
int v[M<<1],w[M<<1],next[M<<1],first[N],en;
void AddEdge(int U,int V,int W)
{
v[++en]=V;
w[en]=W;
next[en]=first[U];
first[U]=en;
}
ll d[N];
bool inq[N];
void spfa(int S)
{
for(int i=1;i<=n;++i)
d[i]=INF;
d[S]=0;
q.push(S);
inq[S]=1;
while(!q.empty())
{
int U=q.front();
for(int i=first[U];i;i=next[i])
if(d[U]+(ll)w[i]<d[v[i]])
{
d[v[i]]=d[U]+(ll)w[i];
if(!inq[v[i]])
{
inq[v[i]]=1;
q.push(v[i]);
}
}
q.pop(); inq[U]=0;
}
}
};
int Map(int x,bool op)
{
if(x==Net::S||x==Net::T)
return x;
return ((!op)?((x<<1)-2):((x<<1)-1));
}
int main()
{
int x,y,z;
scanf("%d%d",&SP::n,&SP::m);
for(int i=1;i<=SP::m;++i)
{
scanf("%d%d%d",&x,&y,&z);
SP::AddEdge(x,y,z);
SP::AddEdge(y,x,z);
}
SP::spfa(1);
Net::S=1;
Net::T=2*SP::n-2;
Net::n=2*SP::n-2;
memset(Net::first,-1,sizeof(int)*(Net::n+1));
for(int i=1;i<=SP::en;i+=2)
{
if(SP::d[SP::v[i+1]]+(ll)SP::w[i]==SP::d[SP::v[i]])
Net::AddEdge(Map(SP::v[i+1],1),Map(SP::v[i],0),INF);
if(SP::d[SP::v[i]]+(ll)SP::w[i]==SP::d[SP::v[i+1]])
Net::AddEdge(Map(SP::v[i],1),Map(SP::v[i+1],0),INF);
}
scanf("%d",&x);
for(int i=2;i<SP::n;++i)
{
scanf("%d",&x);
Net::AddEdge(Map(i,0),Map(i,1),x);
}
scanf("%d",&x);
cout<<Net::MaxFlow()<<endl;
return 0;
}
【最短路】【最大流】bzoj3931 [CQOI2015]网络吞吐量的更多相关文章
- bzoj千题计划136:bzoj3931: [CQOI2015]网络吞吐量
http://www.lydsy.com/JudgeOnline/problem.php?id=3931 在最短路网络上跑最大流 #include<queue> #include<c ...
- bzoj3931: [CQOI2015]网络吞吐量(spfa+网络流)
3931: [CQOI2015]网络吞吐量 题目:传送门 题解: 现在有点难受....跳了一个多钟...菜啊... 题意都把做法一起给了....最短路+网路流啊. 不想说话...记得开long lon ...
- bzoj3931: [CQOI2015]网络吞吐量
将最短路图找出来,跑maxflow即可.有注意到数据范围.然后输出的时候%dWA了三次QAQ... #include<cstdio> #include<cstring> #in ...
- BZOJ3931 [CQOI2015]网络吞吐量(最大流)
没啥好说的,有写过类似的,就是预处理出最短路上的边建容量网络. #include<cstdio> #include<cstring> #include<queue> ...
- [bzoj3931][CQOI2015]网络吞吐量——最短路+网络流
题目 传送门 题解 第一次一遍就AC一道bzoj上的题,虽然是一道水题... 我们做一边最短路,求出每个点的dist,然后再做一次类似spfa的操作,求出每个点是否可以用于建图. 在新图上拆点跑一边d ...
- 【BZOJ3931】[CQOI2015]网络吞吐量 最大流
[BZOJ3931][CQOI2015]网络吞吐量 Description 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为 ...
- 【BZOJ-3931】网络吞吐量 最短路 + 最大流
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1228 Solved: 524[Submit][Stat ...
- BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )
最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...
- BZOJ 3931: [CQOI2015]网络吞吐量 最大流
3931: [CQOI2015]网络吞吐量 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
随机推荐
- EditPlus直接连接Linux服务器编辑文本文件
填写好:描述,ip地址,用户名,密码, 然后点下面的高级选项: 然后返回上一个页面,继续 确定 OK: 然后,在主界面左侧点倒三角: 就可以选择我们之前配置的远程服务器地址,弹出提示框 点确定, 就连 ...
- canvas知识02:图片放大镜效果
效果截图: JS代码: <script> // 初始化canvas01和上下文环境 var cav01 = document.getElementById('cav01'); var cx ...
- bzoj 4999: This Problem Is Too Simple!
Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2^31) 表示将i节点的值改为x. 2. Q i j x(0<=x&l ...
- mongodb的数据库操作
1.创建数据库 语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 1.创建数据库 > show dbs ...
- JSP页面中格式化日期为指顶格式
有时候在页面中显示直接从数据库获取的日期时候会出现英文的日期格式.比如:
- Linux ssh的使用
1.查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号.使用ssh -V命令可以得到版本号.需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用Op ...
- Golang使用amqp发送消息
1.为什么使用信道(channel)而不使用TCP连接发送AMQP命令? 对操作系统来说频繁的建立和销毁TCP连接开销非常昂贵,而操作系统每秒建立的连接是有上限的,性能瓶颈不可避免,而只建立一条TCP ...
- linux设备驱动中的并发控制【转】
转自:http://www.cnblogs.com/plinx/archive/2013/01/28/2873121.html 在linux内核中,主要的静态发生于以下几种情况: 1.对称多处理器(S ...
- (接口自动化)Python3操作MySQL数据库
基础语法: import pymysql #导入模块 conn = pymysql.connect(host='localhost',user='root', passwd='123456', db= ...
- phpstorm+xdebug详解
1.run->edit configurations StartUrl最好是网址,不然容易出错,Server选择的是配置时添加的Servers,详可参考:http://www.cnblogs.c ...