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]星际竞速(费用流)的更多相关文章

  1. BZOJ 1927: [Sdoi2010]星际竞速 费用流

    1927: [Sdoi2010]星际竞速 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  2. Luogu2469 SDOI2010 星际竞速 费用流

    传送门 发现它的本质是求一个费用最小的路径覆盖 最小路径覆盖是网络流23题中的一个比较典型的模型 所以考虑相似的建边 因为每一个点要恰好经过一次,是一个有上下界的网络流,故拆点,星球\(i\)拆成\( ...

  3. BZOJ 1927 星际竞速(费用流)

    考虑费用流,题目要求走n个点都走完且恰好一次,显然流量的限制为n. 建立源点s和汇点t,并把每个星球拆成两个点i和i',分别表示已到达该点和经过该点. 对于能力爆发,建边(s,i',1,w). 对应高 ...

  4. BZOJ 1927: [Sdoi2010]星际竞速(费用流)

    传送门 解题思路 仿照最小路径覆盖问题,用费用流解决此题.最小路径覆盖问题是拆点连边后用\(n-\)最大匹配,这里的话也是将每个点拆点,源点向入点连流量为\(1\),费用为\(0\)的边,向出点连流量 ...

  5. [SDOI2010]星际竞速——费用流

    类似于最短路的网络流,而且还要保证每个点经过一次,拆点就比较方便了. 连边怎么连?要保证最大流是n(每个点经过一次)还要能从直接跳转 将每个点拆点.源点向每个点的入点连一条容量为1费用为0的边.源点向 ...

  6. BZOJ-1927 星际竞速 最小费用最大流+拆点+不坑建图

    1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 1593 Solved: 967 [Submit][Statu ...

  7. [bzoj1927]星际竞速

    考虑没有爆发,那么相当于是带权最小不可交路径覆盖,由于只能从编号小的到编号大的,因此一定是DAG,而DAG的最小路径覆盖可以拆点并跑最大流,那么带权的只需要跑费用流即可(S向i连(1,0)的边,i'向 ...

  8. [SDOI2010][bzoj1927] 星际竞速 [最小路径覆盖+费用流]

    题面 传送门 思路 仔细观察题目要求的东西,发现就是求一个最小路径覆盖,只不过可以跳跃(就是那个鬼畜的超级跳跃) 那么就直接上最小路径覆盖模版 对每个点,拆成两个点$X_i$和$Y_i$,建立超级源超 ...

  9. BZOJ1927 [Sdoi2010]星际竞速 【费用流】

    1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2582  Solved: 1601 [Submit][St ...

随机推荐

  1. Eclipse Infrastructure

    Everything is plug-ins running on or loaded by plug-ins loader called by a small kernal which is an ...

  2. c++ 处理utf-8字符串

    c++的字符串中的每一个元素都是一个字节.所以在装入utf8字符串的时候,其实是按照一定的规则编码的. 字符的8位中 如果0开头 则自己就是一个单位. 1字节 0xxxxxxx  2字节 110xxx ...

  3. selnium截屏操作

    这个算是难找的.C# ITakeScreenShot 接口来实现截图.不是ScreenShot这个坑弄了很长时间啊. var folderLocation = Environment.CurrentD ...

  4. Centos 6/RHEL disable the IPv6 module.

    http://minimallinux.blogspot.com/2013/07/centos-6rhel-disable-ipv6-module.html IPv6 was introduced t ...

  5. Selenium入门18 断言

    自动化测试需对比实际结果与预期结果,给出测试结论. 1 条件判断 if ...else... 2 assert ... #coding:utf-8 #断言 from selenium import w ...

  6. windows如何关闭指定端口

    关闭windows中被占用的端口,比如我们常见的8080端口被占用了 1.查找端口的PID netstat -aon|findstr "8080" 如图 PID为3888 2.关闭 ...

  7. 剑指offer 35 第一个只出现一次的字符

    错误写法 class Solution { public: int FirstNotRepeatingChar(string str) { int length = str.size(); ) ; ] ...

  8. Can Microsoft’s exFAT file system bridge the gap between OSes?

    转自:http://arstechnica.com/information-technology/2013/06/review-is-microsofts-new-data-sharing-syste ...

  9. scrapy install

    csf@ubuntu:~$ sudo apt install python-scrapy

  10. Java面试不得不知的问题(一)

    程序员面试   1. 面向对象的特征有哪些方面  ·   抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...