【BZOJ1877】[SDOI2009]晨跑 最小费用最大流
【BZOJ1877】[SDOI2009]晨跑
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 <cstring>
#include <iostream>
#include <queue>
using namespace std;
int to[50000],next[50000],head[410],cost[50000],flow[50000],d[410],re[410],rv[410],inq[410];
int n,m,cnt,ans,sum;
queue<int> q;
int bfs()
{
int i,u;
memset(d,0x3f,sizeof(d));
q.push(1),d[1]=0;
while(!q.empty())
{
u=q.front(),q.pop();
inq[u]=0;
for(i=head[u];i!=-1;i=next[i])
{
if(flow[i]&&d[to[i]]>d[u]+cost[i])
{
d[to[i]]=d[u]+cost[i];
re[to[i]]=i;
rv[to[i]]=u;
if(!inq[to[i]])
{
inq[to[i]]=1;
q.push(to[i]);
}
}
}
}
return d[n]<1000000000;
}
void add(int a,int b,int c,int d)
{
to[cnt]=b;
flow[cnt]=c;
cost[cnt]=d;
next[cnt]=head[a];
head[a]=cnt++;
}
int main()
{
scanf("%d%d",&n,&m);
int i,a,b,c,mf;
memset(head,-1,sizeof(head));
for(i=1;i<=n;i++) add(i,i+n,1,0),add(i+n,i,0,0);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(a!=1) a=a+n;
add(a,b,1,c),add(b,a,0,-c);
}
while(bfs())
{
ans++,sum+=d[n];
for(i=n;i!=1;i=rv[i]) flow[re[i]]--,flow[re[i]^1]++;
}
printf("%d %d",ans,sum);
return 0;
}
【BZOJ1877】[SDOI2009]晨跑 最小费用最大流的更多相关文章
- [SDOI2009]晨跑[最小费用最大流]
[SDOI2009]晨跑 最小费用最大流的板子题吧 令 \(i'=i+n\) \(i -> i'\) 建一条流量为1费用为0的边这样就不会对答案有贡献 其次是对 \(m\) 条边建 \(u'-& ...
- BZOJ 1877: [SDOI2009]晨跑( 最小费用最大流 )
裸的费用流...拆点, 流量限制为1, 最后的流量和费用即答案. ------------------------------------------------------------------- ...
- BZOJ-1877 晨跑 最小费用最大流+拆点
其实我是不想做这种水题的QWQ,没办法,剧情需要 1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1704 Solve ...
- BZOJ1877 [SDOI2009]晨跑 【费用流】
题目 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街道 ...
- 【BZOJ1877】晨跑(费用流)
[BZOJ1877]晨跑(费用流) 题面 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在 ...
- BZOJ_1877_[SDOI2009]晨跑_费用流
BZOJ_1877_[SDOI2009]晨跑_费用流 题意: Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在给出 ...
- 1877. [SDOI2009]晨跑【费用流】
Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个 ...
- 【BZOJ 1877】 [SDOI2009]晨跑(费用流)
题目描述 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街 ...
- bzoj1877: [SDOI2009]晨跑
挺裸的最小费用最大流... #include<cstdio> #include<queue> #include<cstring> #include<iostr ...
随机推荐
- java-request与response编码问题
一.request.setCharacterEncoding("utf-8") 二.response.setContentType("text/html;charset= ...
- 利用Powershell自动部署asp.net mvc网站项目 (一)
这一篇中我们会写一些关于自动化部署的代码.我们会使用 Powershell 书写这类代码. 你将发现这篇文章中涉及的东西非常具体,有的要求甚至相当苛刻且可能不具有通用性.这是因为部署从来都是跟环境打交 ...
- Windows消息队列一
系统消息--ID范围 -0x03FF 由系统定义好的小哦啊拍下哦,可以在程序中直接使用. 用户自定义消息--ID范围0x0400-0x7FFF 由用户自己定义,满足用户自己的需求.由用户自己发出消息, ...
- 文本处理三剑客之AWK的用法
1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...
- js中onclick中文参数传输方式
添加单引号或双引号即可,例: var type = "'"+n.bankCard.type+"'"; var number = "'"+n. ...
- shell脚本程序中循环、判断语句的介绍
shell的循环主要有3种,for,while,until shell的分支判断主要有2种,if,case 一,for循环 C/C++ Code复制内容到剪贴板 #!/bin/bash for fil ...
- Unity3D工程源码目录
2-0 暗黑破坏神3 链接:http://pan.baidu.com/s/1dEAUZoX 密码:cly4 2-1 炉石传说 客户端加服务器端 链接:http://pan.baidu.co ...
- js正则表达式的基本语法
1.正则表达式基本语法 创建正则表达式 var re = new RegExp();//RegExp是一个对象,和Aarray一样 //但这样没有任何效果,需要将正则表达式的内容作为字符串传递进去 r ...
- mysqldump工具,通过--where选项,导出指定表中指定数据?
需求描述: 今天在使用mysqldump工具导出表的时候,考虑能不能导出满足条件的数据行,不要 将表都导出来,查找资料,通过--where选项,就可以实现目的,做个实验,在此记录下. 操作过程: 1. ...
- QQ第三方登录实例demo(QQSDK包优化)
实现效果: 实现流程: 1.注冊QQ互联开发人员 QQ互联官网 注冊成为开发人员(须要审核) 2.审核通过之后 申请应用(须要互联人员审核*须要备案成功的线上域名) 以下我们開始下载QQsdk包 QQ ...