[BZOJ1927]星际竞速(费用流)
Description
题意:给定n个点m条边的无向图,只能从编号小的到编号大的,且要求经过所有点刚好一次,而且可以从任意点瞬移到i号点并花费代价Ai,求最小代价。
n<=800,m<=15000
Solution
Code
#include <cstdio>
#include <algorithm>
#include <queue>
#define N 2010
#define Inf 0x7fffffff
using namespace std;
struct info{int to,nex,f,c;}e[N*100];
int n,m,T,S,tot,nodes,head[N],Ans;
int dis[N],fr[N];
bool vis[N];
inline void Link(int u,int v,int f,int c){
    e[++tot].to=v;e[tot].nex=head[u];head[u]=tot;e[tot].f=f;e[tot].c=c;
    e[++tot].to=u;e[tot].nex=head[v];head[v]=tot;e[tot].f=0;e[tot].c=-c;
}
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
inline void Init(){
	n=read(),m=read();
	S=0,T=n*2+1;tot=1;
	for(int i=1;i<=n;++i){
		int t=read();
		Link(S,i,1,0);
		Link(i+n,T,1,0);
		Link(S,i+n,1,t);
	}
	while(m--){
		int u=read(),v=read(),w=read();
		if(u>v) swap(u,v);
		Link(u,v+n,1,w);
	}
}
queue<int> q;
bool spfa(){
	for(int i=0;i<=T;++i)dis[i]=Inf;
	while(!q.empty()) q.pop();
	dis[0]=0,q.push(0),vis[0]=1;
	while(!q.empty()){
		int u=q.front();q.pop();
		//vis[u]=0;
		for(int i=head[u];i;i=e[i].nex){
			int v=e[i].to;
			if(e[i].f&&dis[v]>dis[u]+e[i].c){
				dis[v]=dis[u]+e[i].c;
				fr[v]=i;
				if(!vis[v]){vis[v]=1;q.push(v);}
			}
		}
		vis[u]=0;
	}
	if(dis[T]==Inf) return 0;
	return 1;
}
void mcf(){
	int x=Inf;
	for(int i=fr[T];i;i=fr[e[i^1].to])
		x=min(x,e[i].f);
	for(int i=fr[T];i;i=fr[e[i^1].to]){
		Ans+=x*e[i].c;
		e[i].f-=x;
		e[i^1].f+=x;
	}
}
int main(){
    Init();
    while(spfa()) mcf();
    printf("%d\n",Ans);
    return 0;
}
												
											[BZOJ1927]星际竞速(费用流)的更多相关文章
- BZOJ 1927: [Sdoi2010]星际竞速 费用流
		
1927: [Sdoi2010]星际竞速 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
 - Luogu2469 SDOI2010 星际竞速 费用流
		
传送门 发现它的本质是求一个费用最小的路径覆盖 最小路径覆盖是网络流23题中的一个比较典型的模型 所以考虑相似的建边 因为每一个点要恰好经过一次,是一个有上下界的网络流,故拆点,星球\(i\)拆成\( ...
 - BZOJ 1927 星际竞速(费用流)
		
考虑费用流,题目要求走n个点都走完且恰好一次,显然流量的限制为n. 建立源点s和汇点t,并把每个星球拆成两个点i和i',分别表示已到达该点和经过该点. 对于能力爆发,建边(s,i',1,w). 对应高 ...
 - BZOJ 1927: [Sdoi2010]星际竞速(费用流)
		
传送门 解题思路 仿照最小路径覆盖问题,用费用流解决此题.最小路径覆盖问题是拆点连边后用\(n-\)最大匹配,这里的话也是将每个点拆点,源点向入点连流量为\(1\),费用为\(0\)的边,向出点连流量 ...
 - [SDOI2010]星际竞速——费用流
		
类似于最短路的网络流,而且还要保证每个点经过一次,拆点就比较方便了. 连边怎么连?要保证最大流是n(每个点经过一次)还要能从直接跳转 将每个点拆点.源点向每个点的入点连一条容量为1费用为0的边.源点向 ...
 - BZOJ-1927  星际竞速     最小费用最大流+拆点+不坑建图
		
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 1593 Solved: 967 [Submit][Statu ...
 - [bzoj1927]星际竞速
		
考虑没有爆发,那么相当于是带权最小不可交路径覆盖,由于只能从编号小的到编号大的,因此一定是DAG,而DAG的最小路径覆盖可以拆点并跑最大流,那么带权的只需要跑费用流即可(S向i连(1,0)的边,i'向 ...
 - [SDOI2010][bzoj1927] 星际竞速 [最小路径覆盖+费用流]
		
题面 传送门 思路 仔细观察题目要求的东西,发现就是求一个最小路径覆盖,只不过可以跳跃(就是那个鬼畜的超级跳跃) 那么就直接上最小路径覆盖模版 对每个点,拆成两个点$X_i$和$Y_i$,建立超级源超 ...
 - BZOJ1927 [Sdoi2010]星际竞速  【费用流】
		
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2582 Solved: 1601 [Submit][St ...
 
随机推荐
- MarkDown 编辑器学习
			
MarkDown 编辑器学习 是一种简单快键的文字排版工具,可以用于编写说明文档,鉴于其语法简洁明了,且其渲染生成的样式简单美观,很多开发者也用它来写博客,已被国内外很多流行博客平台所支持.生成的文件 ...
 - Android GreenDAO 3.0 不修改版本号的情况下增加、删除表、添加字段
			
最近项目中使用了GreenDAO的3.0以上的版本,出现需要增加删除表的需求,刚开始用,发现官方对增加和删除的方法是每次去修改数据库版本号,版本一旦升级,那么原来数据库中的表会全部删除再重建.太麻烦, ...
 - NPOI Excel表格处理
			
//创建一个Excel文件 HSSFWorkbook work = new HSSFWorkbook(); //新建一个工作表 ISheet sheet1 = work.CreateSheet(&qu ...
 - 我的Android开发之路——百度地图开源工具获取定位信息
			
定位技术在现在的移动设备上是必不可少的,许多app都会使用定位功能. 通常定位方式有两种:GPS定位:网络定位. Android系统对这两种定位方式都提供了相应的API支持,但是因为google的网络 ...
 - SharePoint 和 Windows Phone 7 开发人员培训资源
			
该工具包包括单位数目: Windows Phone 7 发展简介 在本单元中,您将了解真实的消费信息存储在 SharePoint 中与你用 Visual Studio 写 Windows Phone ...
 - ubuntu16.04安装中文输入法(转)
			
转自: https://zhidao.baidu.com/question/619127469641961052.html ubuntu没有预装中文输入法,需要自己安装 sudo apt instal ...
 - CRM, C4C和Hybris的后台作业
			
CRM 使用事务码SM36查看CRM系统的后台作业: 举一些例子: ABAP_TEXT_INDEX这个job执行的report是ABAP_DOCU_CREATE_TEXT_INDEX: 负责填充buf ...
 - ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
			
ABAP 使用关键字重复引入一个include program,会报syntax error: 原因是因为ABAP对include这个关键字的实现和其他编程语言有点不一样,在激活时简单地把被inclu ...
 - IOS 多线程-pthread
			
#import <pthread.h> @interface HMViewController () - (IBAction)btnClick; @end @implementation ...
 - php无法保存SESSION问题总汇
			
昨天客户又过来说网站的问题,说的也都是些毛毛雨的东西,管理那么多网站,再有这么些客户的存在,本人也是累了,但当登录后台的时候突然发现后台登录不了,查看了一下验证码服务器端的session为空值,之前登 ...