●BOZJ 1927 [Sdoi2010]星际竞速
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=1927
题解:
显然是个DAG
建图和有向图最小路径覆盖的建图有些相似。
都是拆点为 u u'分别表示出点和入点。
也都要保证每个点最多有一个出度和一个入度。
但因为带权,要求最小花费,切要满足每个点都去一次,既要满足流量,所以采用最小费用最大流。
S -> u :(1,0) 因为每个点都会到达,所以都可以有一个出度(可以从改点流出一个流量)。
S -> u':(1,a[u]) 传送到达 u点,提供一个入度方式
u -> v':(1,w) u的出度对应 v的入度
u'-> T :(1,0) 流向汇点,表示改点到达过。
代码:
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 2000
#define MAXM 50000
#define INF 0x3f3f3f3f3f3f3f3f
#define ll long long
using namespace std;
struct Edge{
ll to[MAXM],cap[MAXM],cot[MAXM],nxt[MAXM],head[MAXN],ent;
void Init(){ent=2;}
void Adde(ll u,ll v,ll w,ll c){
to[ent]=v; cap[ent]=w; cot[ent]=c; nxt[ent]=head[u]; head[u]=ent++;
to[ent]=u; cap[ent]=0; cot[ent]=-c;nxt[ent]=head[v]; head[v]=ent++;
}
ll Next(ll i,bool type){
return type?head[i]:nxt[i];
}
}E;
bool vis[MAXN];
ll cur[MAXN],dis[MAXN];
ll N,M,S,T;
ll idx(ll i,ll k){
return i+k*N;
}
bool spfa(){
static bool inq[MAXN];
memset(inq,0,sizeof(inq));
memset(dis,0x3f,sizeof(dis)); ll u,v;
queue<ll> q; dis[T]=0; inq[T]=1; q.push(T);
while(!q.empty()){
u=q.front(); q.pop(); inq[u]=0;
for(ll i=E.Next(u,1);i;i=E.Next(i,0)){
v=E.to[i];
if(!E.cap[i^1]||dis[v]<=dis[u]+E.cot[i^1]) continue;
dis[v]=dis[u]+E.cot[i^1];
if(!inq[v]) q.push(v),inq[v]=1;
}
}
return dis[S]<INF;
}
ll dfs(ll u,ll reflow){
if(u==T||!reflow) return reflow;
ll flowout=0,f,v; vis[u]=1;
for(ll &i=cur[u];i;i=E.Next(i,0)){
v=E.to[i];
if(vis[v]||dis[v]+E.cot[i]!=dis[u]) continue;
f=dfs(v,min(reflow,E.cap[i]));
flowout+=f; E.cap[i^1]+=f;
reflow-=f; E.cap[i]-=f;
if(!reflow) break;
}
if(!flowout) dis[u]=INF;
return flowout;
}
ll Dinic(){
ll cost=0;
while(spfa()){
memcpy(cur,E.head,sizeof(E.head));
memset(vis,0,sizeof(vis));
cost+=dfs(S,INF)*dis[S];
}
return cost;
}
int main()//开long long
{
E.Init();
scanf("%lld%lld",&N,&M);
S=N*2+1; T=N*2+2;
for(ll i=1,w;i<=N;i++){//传送到达 i点。
scanf("%lld",&w);
E.Adde(S,idx(i,1),1,w);
}
for(ll i=1,u,v,w;i<=M;i++){
scanf("%lld%lld%lld",&u,&v,&w);
if(u>v) swap(u,v);
E.Adde(idx(u,0),idx(v,1),1,w);//u的出度对应 v的入度。
}
for(ll i=1;i<=N;i++){
E.Adde(S,idx(i,0),1,0);//因为每个点都会到达,所以都可以提供一个出度。
E.Adde(idx(i,1),T,1,0);//流向汇点,表示改点到达。
}
ll cost=Dinic();
printf("%lld",cost);
return 0;
}
●BOZJ 1927 [Sdoi2010]星际竞速的更多相关文章
- BZOJ 1927: [Sdoi2010]星际竞速
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2051 Solved: 1263[Submit][Stat ...
- 1927: [Sdoi2010]星际竞速
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2040 Solved: 1257[Submit][Stat ...
- 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到点连边边权为曲速的代价,一个曲速移 ...
- Luogu 2469 [SDOI2010]星际竞速 / HYSBZ 1927 [Sdoi2010]星际竞速 (网络流,最小费用流)
Luogu 2469 [SDOI2010]星际竞速 / HYSBZ 1927 [Sdoi2010]星际竞速 (网络流,最小费用流) Description 10年一度的银河系赛车大赛又要开始了.作为全 ...
- 【bzoj】1927 [Sdoi2010]星际竞速
[算法]最小费用最大流 [题解]跟滑雪略有类似,同样因为可以重复所以不是最小路径覆盖. 连向汇的边容量为1足矣,因为一个点只会出去一次(路径结束). bzoj 1927 [Sdoi2010]星际竞速 ...
- Bzoj 1927: [Sdoi2010]星际竞速(网络流)
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Description 10年一度的银河系赛车大赛又要开始了.作为全银河最盛大 ...
随机推荐
- 敏捷开发每日报告--day4
1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285) Git链接:https://github.com/WHUSE2017/C-team 2 ...
- 20145237 实验二 “Java面向对象程序设计”
20145237 实验二 “Java面向对象程序设计” 实验内容 • 理解并掌握面向对象三要素:封装.继承.多态 • 初步掌握UML建模 • 熟悉S.O.L.I.D原则 • 使用TDD设计实现复数类 ...
- 第二十八条:利用有限制通配符来提升API的灵活性
如第二十五条所述,参数化类型是不可变的.类型Type1和Type2而言,不管Type1与Type2的关系,List<Type1>既不是List<Type2>的子类型,也不是也不 ...
- css中的em 简单教程 -- 转
先附上原作的地址: https://www.w3cplus.com/css/px-to-em 习惯性的复制一遍~~~~ -------------------------------我是分界线---- ...
- 11-TypeScript中的名称空间
在后端开发语言中,比如C#中,可以将不同源代码文件中的代码通过名称空间组合到一起.一般一个类定义在一个源代码文件中,在功能上属于一个上下文的源代码文件通过名称空间进行组织. 在TypeScript中, ...
- js解决IE8不支持html5,css3的问题(respond.js 的使用注意)
IE8.0及以下不支持html5,css3的解析.目前为止IE8以下的版本使用率在10%左右,网站还是有必要兼容的. 1,在你的所有css最后判断引入两个js文件. html5.js 是用来让ie8 ...
- javaScript识别网址文本并转为链接文本
最近项目有个需求:用户之间发送消息时,如果发送者输入的信息中含有网址文本,要在接受者界面中显示网址链接,点击该链接直接跳转到网页.这个功能和 QQ 发送网址文本的效果非常像,可以说是一模一样的. 思路 ...
- webgoat——XSS
Stage 1: Stored XSS(存储XSS攻击 黑别人) 实验内容:主要是用户"Tom"(攻击者)在自己的个人资料中添加了恶意代码(比如最简单的<script> ...
- SpringCloud是什么?
参考链接: http://blog.csdn.net/forezp/article/details/70148833 一.概念定义 Spring Cloud是一个微服务框架,相比Dubbo ...
- Mego开发文档 - 从EF6/EFCore迁移到Mego
从EF6/EFCore迁移到Mego框架 如果您有EntityFragmework6或EntityFragmeworkCore的开发经验,在首次接触Mego框架时会发现这两个框架非常相似,本文将帮忙您 ...