晨跑(bzoj 1877)
Description
Input
Output
Sample Input
1 2 1
1 3 1
2 4 1
3 4 1
4 5 1
4 6 1
2 5 5
3 6 6
5 7 1
6 7 1
Sample Output
HINT
对于30%的数据,N ≤ 20,M ≤ 120。
对于100%的数据,N ≤ 200,M ≤ 20000。
/*
比较裸的一道费用流,就当打打板子。
需要注意的是一个点只能用一次,所以要拆点,在两点之间建一条容量为1的边。
*/
#include<cstdio>
#include<iostream>
#define N 410
#define M 41000
#define inf 1000000000
using namespace std;
int head[N],dis[N],q[N*],vis[N],fa[N],n,m,S,T,cnt=,timer,ans;
struct node{
int v,pre,f,w;
};node e[M];
void add(int u,int v,int f,int w){
e[++cnt].v=v;e[cnt].f=f;e[cnt].w=w;e[cnt].pre=head[u];head[u]=cnt;
e[++cnt].v=u;e[cnt].f=;e[cnt].w=-w;e[cnt].pre=head[v];head[v]=cnt;
}
bool spfa(){
for(int i=;i<=T;i++)dis[i]=inf;
int h=,t=;
q[]=S;dis[S]=;vis[S]=;
while(h<t){
int x=q[++h];vis[x]=;
for(int i=head[x];i;i=e[i].pre){
int v=e[i].v;
if(dis[v]>dis[x]+e[i].w&&e[i].f){
dis[v]=dis[x]+e[i].w;
fa[v]=i;
if(!vis[v]){
q[++t]=v;
vis[v]=;
}
}
}
}
return dis[T]!=inf;
}
void updata(){
int tmp=T;
while(tmp!=S){
int l=fa[tmp],v=e[l].v;
e[l].f--;e[l^].f++;
tmp=e[l^].v;
}
ans+=dis[T];
}
int main(){
scanf("%d%d",&n,&m);
S=,T=n*+;
add(S,,inf,);add(n*,T,inf,);
for(int i=;i<n;i++)add(i,i+n,,);
add(,+n,inf,);add(n,n+n,inf,);
for(int i=;i<=m;i++){
int x,y,z;scanf("%d%d%d",&x,&y,&z);
add(x+n,y,,z);
}
while(spfa()){
timer++;updata();
}
printf("%d %d",timer,ans);
return ;
}
晨跑(bzoj 1877)的更多相关文章
- AC日记——[SDOI2009]晨跑 bzoj 1877
1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2131 Solved: 1142[Submit][Status][ ...
- 【BZOJ】【1877】【SDOI2009】晨跑
网络流/费用流 费用流入门题……根本就是模板题好吗! 拆点搞定度数限制,也就是每个点最多经过一次……源点汇点除外. /***************************************** ...
- BZOJ 3438 小M的作物 & BZOJ 1877 [SDOI2009]晨跑
我由衷地为我的朋友高兴.哈哈,yian,当你nick name破百上千时,再打“蒟蒻”就会被打的. 好的,说正事吧.请注意,这还是题解.但我发现,网络流实在是太套路了(怪不得这两年几乎销声匿迹).我们 ...
- 【BZOJ】1877: [SDOI2009]晨跑(最小费用最大流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1877 费用流做多了,此题就是一眼题. 拆点表示只能经过一次,容量为1,费用为0. 然后再连边即可,跑 ...
- BZOJ 1877: [SDOI2009]晨跑 费用流
1877: [SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一 ...
- BZOJ 1877: [SDOI2009]晨跑( 最小费用最大流 )
裸的费用流...拆点, 流量限制为1, 最后的流量和费用即答案. ------------------------------------------------------------------- ...
- BZOJ 1877 晨跑 拆点费用流
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1877 题目大意: Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧 ...
- 【BZOJ 1877】 [SDOI2009]晨跑
Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十 ...
- bzoj 1877 [SDOI2009]晨跑(最小费用最大流)
Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十 ...
随机推荐
- Python自动化之sqlalchemy(修改和查询)
修改 my_user = Session.query(User).filter_by(name="alex").first() my_user.name = "Alex ...
- ndk学习14: 进程
Linux进程管理 来自为知笔记(Wiz)
- List转换DataTable
/// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...
- C#调用有有参有返的存储过程
(1)在SQL Server中建立如下的存储过程: set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[GetName ...
- 向SqlServer数据库插入数据
Insert Values Insert Select Insert Exec Select Into Bulk Insert Insert Values是最常用的一种插入数据的方式,基本语法如下,表 ...
- oracle数据库高级应用之《触发器的建立》
(一)oracle数据库触发器的建立 eg1 CREATE OR REPLACE TRIGGER TRIGGER_ON_TD_DEPARTMENT AFTER INSERT OR UPDATE OR ...
- python之打包相关
打包手册:https://python-packaging-user-guide.readthedocs.org/en/latest/installing.html#installing-from-a ...
- Qt 信号槽如何传递参数(或带参数的信号槽)
信号槽如何传递参数(或带参数的信号槽) 利用Qt进行程序开发时,有时需要信号槽来完成参数传递.带参数的信号槽在使用时,有几点需要注意的地 ...
- Unity3d《Shader篇》绘制圆角图片
Pass { CGPROGRAM // Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a s ...
- cocos2dx旧版本支持arm64修改
修改的版本是cocos2dx.2.2 1.在neon_matrix_impl.c中修改 #if defined(__ARM_NEON__)为 #if defined(_ARM_ARCH_7) 2.在m ...