图论(网络流):[SDOI2010] 星际竞速
Description
Input
Output
Sample Input
starrace.in
1 100 100
2 1 10
1 3 1
2 3 1
Sample Output
starrace.out
12
HINT
说明:先使用能力爆发模式到行星 1,花费时间 1。
然后切换到高速航行模式,航行到行星 2,花费时间10。
之后继续航行到行星 3完成比赛,花费时间 1。
虽然看起来从行星 1到行星3再到行星 2更优,但我们却不能那样做,因为那会导致超能电驴爆炸。
对于 30%的数据 N≤20,M≤50;
对于 70%的数据 N≤200,M≤4000;
对于100%的数据N≤800, M≤15000。输入数据中的任何数都不会超过10^6。
输入数据保证任意两颗行星之间至多存在一条航道,且不会存在某颗行星到自己的航道。
用二分图模型解题。
左半边表示边的出点,右半边表示边的入点,瞬移的就直接S连入点,有正常边的直接在二分图中连。
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <queue>
- using namespace std;
- const int maxn=;
- const int maxm=;
- const int INF=;
- int n,m,w[maxn],cnt,fir[maxn],to[maxm],nxt[maxm];
- int cap[maxm],val[maxm],path[maxn],vis[maxn],dis[maxn];
- queue<int>q;
- struct Net_Flow{
- Net_Flow(){cnt=;}
- void add(int a,int b,int c,int v){
- nxt[++cnt]=fir[a];cap[cnt]=c;
- to[cnt]=b;val[cnt]=v;fir[a]=cnt;
- }
- void addedge(int a,int b,int c,int v){
- add(a,b,c,v);add(b,a,,-v);
- }
- int Spfa(int S,int T){
- memset(dis,,sizeof(dis));
- q.push(S);vis[S]=;dis[S]=;
- while(!q.empty()){
- int x=q.front();q.pop();vis[x]=;
- for(int i=fir[x];i;i=nxt[i])
- if(cap[i]&&dis[to[i]]>dis[x]+val[i]){
- dis[to[i]]=dis[x]+val[i];
- if(!vis[to[i]])q.push(to[i]);
- vis[to[i]]=;path[to[i]]=i;
- }
- }
- return dis[T];
- }
- int Aug(int S,int T){
- int p=T,f=INF;
- while(p!=S){
- f=min(f,cap[path[p]]);
- p=to[path[p]^];
- }p=T;
- while(p!=S){
- cap[path[p]]-=f;
- cap[path[p]^]+=f;
- p=to[path[p]^];
- }
- return f;
- }
- int MCMF(int S,int T){
- int v=,d;
- while((d=Spfa(S,T))!=INF)
- v+=d*Aug(S,T);
- return v;
- }
- }mcmf;
- int S,T;
- int main(){
- freopen("starrace.in","r",stdin);
- freopen("starrace.out","w",stdout);
- scanf("%d%d",&n,&m);S=;T=*n+;
- for(int i=;i<=n;i++){
- scanf("%d",&w[i]);
- mcmf.addedge(S,i,,);
- mcmf.addedge(S,i+n,,w[i]);
- mcmf.addedge(i+n,T,,);
- }
- for(int i=,a,b,v;i<=m;i++){
- scanf("%d%d%d",&a,&b,&v);
- if(a>b)swap(a,b);
- mcmf.addedge(a,b+n,,v);
- }
- printf("%d\n",mcmf.MCMF(S,T));
- return ;
- }
图论(网络流):[SDOI2010] 星际竞速的更多相关文章
- Luogu 2469 [SDOI2010]星际竞速 / HYSBZ 1927 [Sdoi2010]星际竞速 (网络流,最小费用流)
Luogu 2469 [SDOI2010]星际竞速 / HYSBZ 1927 [Sdoi2010]星际竞速 (网络流,最小费用流) Description 10年一度的银河系赛车大赛又要开始了.作为全 ...
- Bzoj 1927: [Sdoi2010]星际竞速(网络流)
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Description 10年一度的银河系赛车大赛又要开始了.作为全银河最盛大 ...
- BZOJ 1927: [Sdoi2010]星际竞速
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2051 Solved: 1263[Submit][Stat ...
- BZOJ1927 [Sdoi2010]星际竞速 【费用流】
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2582 Solved: 1601 [Submit][St ...
- 1927: [Sdoi2010]星际竞速
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2040 Solved: 1257[Submit][Stat ...
- bzoj1927: [Sdoi2010]星际竞速
跟上一题几乎一样... #include<cstdio> #include<cstring> #include<iostream> #include<algo ...
- BZOJ 1927: [Sdoi2010]星际竞速 费用流
1927: [Sdoi2010]星际竞速 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- bzoj 1927 [Sdoi2010]星际竞速(最小费用最大流)
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1576 Solved: 954[Submit][Statu ...
- BZOJ 1927: [Sdoi2010]星际竞速(最小费用最大流)
拆点,费用流... ----------------------------------------------------------------------------- #include< ...
- BZOJ 1927: [Sdoi2010]星际竞速 [上下界费用流]
1927: [Sdoi2010]星际竞速 题意:一个带权DAG,每个点恰好经过一次,每个点有曲速移动到他的代价,求最小花费 不动脑子直接上上下界费用流过了... s到点连边边权为曲速的代价,一个曲速移 ...
随机推荐
- My way to Python - Day05 - 面向对象-思维导图
My way to Python - Day05 - 面向对象 思维导图
- 前端自动化构建工具 Gulp 使用
一个月没写博客了,今天有时间,就写个gulp的入门使用吧.. 简介:gulp是一个前端自动化构建工具,可以实现代码的检查.压缩.合并……等等,gulp是基于Node.js的自动任务运行器 一.安装No ...
- Unity3D GUI学习
Unity3D内置有GUI, 首先,使用GUI实现一个按钮,并且点击实现触发, void OnGUI() { //GUI.Button (new Rect (10,10,50,50), "n ...
- Ant工具
Ant工具 Ant是一种基于Java的build工具.理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷.目前的最新版本为:Ant 1.9.4[1] . Ant的概念 当一 ...
- memcached并发处理
memcached(十八)并发原语CAS与GETS操作 Memcached 并发控制 CAS 协议 memcache控制高并发问题 使用memcached进行并发控制 memcached的最佳实践方案
- vs2010安装路径解决不能修改的方法
环境:win7 64位 解决:网上说需要卸载以下4项 Microsoft Visual Studio Tools for Applications 2.0 - ENU Microsoft Visual ...
- ejs 基本语法
1.基本语法.<% code %> 无缓冲的条件语句元素.<%= code %> 转义HTML,该code并且会打印出来.<%- code %> ...
- Java设计模式(学习整理)---单例模式
1.概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例 ...
- 初探grunt.js
package.js { "name": "ttd_v3", "version": "0.1.0", "aut ...
- C#中foreach遍历学习笔记
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...