[bzoj1927]星际竞速
考虑没有爆发,那么相当于是带权最小不可交路径覆盖,由于只能从编号小的到编号大的,因此一定是DAG,而DAG的最小路径覆盖可以拆点并跑最大流,那么带权的只需要跑费用流即可(S向i连(1,0)的边,i’向T连(1,0)的边,i向j’连(1,t)的边,其中i->j有时间为t的边)。
考虑爆发操作,相当于让任意两点之间都能够新增一条边,但这样跑边数太多,可以直接从S连向i’(1,ai)的边(ai表示i爆发的代价)即可。
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2005
4 struct ji{
5 int nex,to,len,cost;
6 }edge[N*20];
7 queue<int>q;
8 int E,n,m,t,x,y,head[N],d[N],vis[N],from[N];
9 void add(int x,int y,int z,int w){
10 edge[E].nex=head[x];
11 edge[E].to=y;
12 edge[E].len=z;
13 edge[E].cost=w;
14 head[x]=E++;
15 if (E&1)add(y,x,0,-w);
16 }
17 bool spfa(){
18 memset(d,0x3f,sizeof(d));
19 memset(vis,0,sizeof(vis));
20 q.push(0);
21 d[0]=0;
22 while (!q.empty()){
23 int k=q.front();
24 q.pop();
25 vis[k]=0;
26 for(int i=head[k];i!=-1;i=edge[i].nex){
27 int v=edge[i].to;
28 if ((edge[i].len)&&(d[v]>d[k]+edge[i].cost)){
29 d[v]=d[k]+edge[i].cost;
30 from[v]=i;
31 if (!vis[v]){
32 vis[v]=1;
33 q.push(v);
34 }
35 }
36 }
37 }
38 return d[t]<0x3f3f3f3f;
39 }
40 int dinic(){
41 int ans=0;
42 while (spfa()){
43 ans+=d[t];
44 for(int i=t;i;i=edge[from[i]^1].to){
45 edge[from[i]].len--;
46 edge[from[i]^1].len++;
47 }
48 }
49 return ans;
50 }
51 int main(){
52 scanf("%d%d",&n,&m);
53 memset(head,-1,sizeof(head));
54 for(int i=1;i<=n;i++){
55 scanf("%d",&t);
56 add(0,i,1,0);
57 add(0,i+n,1,t);
58 add(i+n,2*n+1,1,0);
59 }
60 for(int i=1;i<=m;i++){
61 scanf("%d%d%d",&x,&y,&t);
62 if (x>y)swap(x,y);
63 add(x,y+n,1,t);
64 }
65 t=2*n+1;
66 printf("%d",dinic());
67 }
[bzoj1927]星际竞速的更多相关文章
- BZOJ-1927 星际竞速 最小费用最大流+拆点+不坑建图
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 1593 Solved: 967 [Submit][Statu ...
- [BZOJ1927]星际竞速(费用流)
Description 题意:给定n个点m条边的无向图,只能从编号小的到编号大的,且要求经过所有点刚好一次,而且可以从任意点瞬移到i号点并花费代价Ai,求最小代价. n<=800,m<=1 ...
- [SDOI2010][bzoj1927] 星际竞速 [最小路径覆盖+费用流]
题面 传送门 思路 仔细观察题目要求的东西,发现就是求一个最小路径覆盖,只不过可以跳跃(就是那个鬼畜的超级跳跃) 那么就直接上最小路径覆盖模版 对每个点,拆成两个点$X_i$和$Y_i$,建立超级源超 ...
- bzoj1927: [Sdoi2010]星际竞速
跟上一题几乎一样... #include<cstdio> #include<cstring> #include<iostream> #include<algo ...
- BZOJ1927 [Sdoi2010]星际竞速 【费用流】
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2582 Solved: 1601 [Submit][St ...
- 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 ...
- C++之路进阶——codevs2313(星际竞速)
2313 星际竞速 2010年省队选拔赛山东 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 10 年一度的银河系 ...
- BZOJ 1927: [Sdoi2010]星际竞速 费用流
1927: [Sdoi2010]星际竞速 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
随机推荐
- Java标识符和关键字的区别!java基础 java必学
任何计算机语言都离不开标识符和关键字,那我们就来简单讲一下他们两者的区别,希望有助于大家的的理解!本篇文章干货满满,如果你觉得难懂的话可以看下高淇老师讲的Java300集的教学视频,分选集,深度剖析了 ...
- visualbox安装ubuntu18过程中不能输入name,password,密码,姓名问题的解决办法+一些基本操作
问题描述:visualbox安装ubuntu18,,,,卡在注册处,无法输入姓名,密码-点击无法输入............如下图: 解决办法:更改你的Ubuntu的主板内存,主板内存默认的值 ...
- QQ三国 秘制机簧去哪打?打的太慢?
我在完成这个任务时卡了很久,因为打的效率极低,因此最后我是如何完成的. 1. 先说打谁吧,刚开始我打机簧蜘蛛,就没打出来过,,后来换了机簧车,掉率就上升了,建议打机簧车. 2. 如果你一直打不出来,建 ...
- Centos7最小安装后快速初始化脚本
功能说明 服务器通常使用最小化安装操作系统,使用该脚本可快速初始化一些基本配置,包括以下: 1.ssh修改默认端口 2.ssh禁止root登陆 3.selinux及firewalld禁用 4.hist ...
- 洛谷3288 SCOI2014方伯伯运椰子(分数规划+spfa)
纪念博客又一次爆炸了 首先,对于本题中,我们可以发现,保证存在正整数解,就表示一定费用会降低.又因为一旦加大的流量,费用一定会变大,所以总流量一定是不变的 那么我们这时候就需要考虑一个退流的过程 对于 ...
- SpringBoot使用注解进行分页
分页使用可以说非常普遍了,有时候会需要非常灵活的方式去开启或关闭分页,尝试使用一下注解的方式来进行分页. 依赖安装 需要使用的依赖: Mybatis-Plus PageHelper SpringBoo ...
- seata序列化日期类型出错
一.背景 最近在整合seata的过程中,发现如果业务表中存在 datetime 的数据类型,那么在分布式事务中,修改这个字段的值时,会出现如下错误.此处提供2种解决方案. com.fasterxml. ...
- TVS管性能及选型总结
https://wenku.baidu.com/view/5b5bda5526fff705cc170af8.html
- 难搞的C语言指针你搞懂了多少
C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...
- MyBatis源码分析(四):SQL执行过程分析
一.获取Mapper接口的代理 根据上一节,Mybatis初始化之后,利用sqlSession(defaultSqlSession)的getMapper方法获取Mapper接口 1 @Override ...