★★★   输入文件:asm_lis.in   输出文件:asm_lis.out   简单对比
时间限制:4 s   内存限制:256 MB

【题目描述】

白色圆柱形的“蓝翔”号在虚空中逐渐变大,一声沉闷的撞击后停住不动。空气阀开始“嘶嘶”作响。

Asm.Def钻出舱门,杜舰长热情地向他伸出右手,“来者可是Asm.Def?”

“正是。”他趁着握手将U盘递给舰长,“这里是所有目标位置,方教授说控制太空就靠你了,否则咱的通信卫星就是一坨废物。”

“没问题,就用这个,保证让它们灰飞烟灭。”杜舰长调出全息图像,是个细长的针状物体。

“阿姆斯特朗回旋加速喷气式阿姆斯特朗动能弹,”舰长介绍道,“本来想用强相互作用力材料,可惜没弄成,但撞击结构关键点,普通合金也够了。”

“雷达数据有误怎么办?靠信仰?”Asm.Def质疑。

“放心吧,我每个月都替它交党费。”

Asm.Def需要帮忙制定打击序列。我们可以把所有目标看做一个N个点,M条边的边带权有向图,每个点都是一个目标。

有两种手段:动能弹和激光。

Asm.Def可以发射若干枚(也可以是零枚)动能弹。每一枚动能弹会沿图中一条简单路径或简单环飞行:

简单路径形如p1->p2->…->pk,其中p1~pk互不相等,且(p1,p2),(p2,p3)…(pk-1,pk)均为图中的有向边。这时目标p2,p3,…,pk会被摧毁,但p1未被摧毁(因为动能弹在p1处尚未充分加速)。

简单环形如p1->p2->…->pk->p1,其中p1~pk互不相等,且(p1,p2),(p2,p3)…(pk,p1)均为图中的有向边。这时目标p1,p2,…,pk都会被摧毁。

一个目标至多出现在一枚动能弹的路径上(即所有动能弹的路径互不相交,包括简单路径中的p1),因为目标碎片十分危险。

动能弹的费用是它飞行路径的边权之和。

除了动能弹,也可以用激光摧毁一个目标,费用是C。

Asm.Def希望算出摧毁所有目标的最小费用。

【输入格式】

第1行3个整数:N,M,C。

接下来M行,每行3个整数s,t,v,代表有一条s->t的有向边,边权为v。

【输出格式】

1行1个整数,即摧毁所有目标的最小费用。

【样例输入1】

4 3 10
1 2 2
2 3 2
3 1 2

【样例输出1】

16

【样例输入2】

6 5 5
1 3 2
2 3 2
3 4 2
4 5 2
4 6 2

【样例输出2】

21

【提示】

样例1:一枚动能弹路径为1->2->3,花费6,用激光摧毁4,花费10.

样例2:一枚动能弹路径为1->3->4->5,花费6,用激光摧毁1,2,6,花费15.

对于40%的数据,2<=N<=5,1<=M<=10.

对于100%的数据,2<=N<=250,1<=M<=30000;s≠t;1<=s,t<=N;1<=v,c<=10000.

两对城市间可能有多条路径,但不会有自环。

【来源】

在此键入。

费用流

屠龙宝刀点击就送

#include <cstdio>
#include <queue>
#define N 30005
#define inf 0x3f3f3f3f
using namespace std;
bool vis[N];
int n,m,c,S,T,cnt=1,to[N<<1],fa[N],DIS[N],came[N],flow[N<<1],val[N<<1],head[N],nextt[N<<1];
void ins(int u,int v,int f,int w)
{nextt[++cnt]=head[u];to[cnt]=v;flow[cnt]=f;val[cnt]=w;head[u]=cnt;nextt[++cnt]=head[v];to[cnt]=u;flow[cnt]=0;val[cnt]=-w;head[v]=cnt;
}
inline int min(int a,int b) {return a>b?b:a;}
bool spfa()
{for(int i=S;i<=T;++i) DIS[i]=inf,came[i]=inf,vis[i]=false;DIS[S]=0;queue<int>q;q.push(S);for(int u;!q.empty();){u=q.front();q.pop();vis[u]=false;for(int i=head[u];i;i=nextt[i]){int v=to[i];if(DIS[v]>DIS[u]+val[i]&&flow[i]){DIS[v]=DIS[u]+val[i];fa[v]=i;came[v]=min(came[u],flow[i]);if(!vis[v]) {vis[v]=true;q.push(v);}}}}return DIS[T]!=inf;
}
int main(int argc,char *argv[])
{freopen("asm_lis.in","r",stdin);freopen("asm_lis.out","w",stdout); scanf("%d%d%d",&n,&m,&c);S=0,T=n<<1|1;int ans=0,left=n;for(int s,t,v;m--;){scanf("%d%d%d",&s,&t,&v);if(v>=c) continue;ins(s,t+n,1,v);}for(int i=1;i<=n;++i){ins(S,i,1,0);ins(S,i+n,1,c);ins(i+n,T,1,0);} while(spfa()){int t=came[T];for(int i=T;i!=S&&i;i=to[fa[i]^1]){flow[fa[i]]-=t;flow[fa[i]^1]+=t;}ans+=t*DIS[T];}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/ruojisun/p/7741135.html

COGS 2091. Asm.Def的打击序列相关推荐

  1. 河南省队选拔 HAOI2015 解题报告

    其实省选在四天前就已经结束了,但由于题目难度略大我到今天上午才补完所有题目--(捂脸逃)考场上很幸运,打完了所有我会写的部分分,最后Round1的110分 + Round2的70分,勉强算是没有被联赛 ...

  2. [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.     例如,对于直线:   ...

  3. Python:字典列表字符串方法测试

    测试的一些Python中的关于字典.列表.字符串的使用方法,放在这里备查. 整个测试代码和说明如下: # -*- coding: utf-8 -*- """Python: ...

  4. ACM/CF赛制getstart模板

    (包含整型变量快速读入.简易循环和连续容器的迭代器循环的宏定义.调试时的运行时间输出(编译选项应有"DEBUG"宏定义)等)  1 /*====================== ...

  5. Python快速计算Fibonacci数列中第n项的方法

    from time import time from functools import lru_cache def fibo1(n):     '''递归法'''     if n in (1, 2) ...

  6. python什么是入口文件_Python注释是什么东东

    注释 标注解释,目的是帮助读者理解的文本 也就是说,注释首先是文本,其二是说明,其三是思路,其四是例子 注释有两种形式 1. # ... 单行注释 用于对某句语句或语句块进行解释 放在语句块的头行或一 ...

  7. [NOIP2011]聪明的质检员

    [问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给 ...

  8. python 列表排序_python列表排序有哪些

    python列表排序:1.冒泡排序,是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来:2.插入排序,通过构建有序序列,对于未排序数据,在已排序序列中 ...

  9. Python3: 字节类型 bytes 和 bytearray

    本文链接: https://blog.csdn.net/xietansheng/article/details/115557553 Python3 学习笔记(目录) 1. bytes Python 官 ...

最新文章

  1. Html5本地存储和本地数据库
  2. uva 129 回溯法入门
  3. BASIC-7 特殊的数字
  4. c语言编写程序计算行列式值,新手作品:行列式计算C语言版
  5. 实例探究Python以并发方式编写高性能端口扫描器的方法
  6. LeetCode 31. Next Permutation
  7. 2019 第八/九周/十周 开发笔记
  8. K8s入门教程|这个给集群搞硬装的才是幕后英雄
  9. 漫画:如何给女朋友解释什么是单例模式?| 技术头条
  10. [HTML/CSS]下拉菜单
  11. handlersocket mysql_Mysql插件之HandlerSocket的安装、配置、使用
  12. vue实现点击图片放大显示功能
  13. 专题开发十三:JEECG微云高速开发平台-附录
  14. 用python写一个专属字典生成器
  15. eclipse Helio项目简介
  16. 简述扁平式管理的技术手段
  17. 吾生也有涯,而学也无涯
  18. 【程序包uti1不存在怎么办?】求解答
  19. 8.17vue项目搜素框的实现
  20. 数据库基础考点笔记-3

热门文章

  1. 双像立体测图基础与立体测图
  2. 设计模式:09-模板方法模式
  3. ArcGIS提取路网节点
  4. 电脑无盘启动系统方案(by 星空武哥)
  5. Java 集合List及Map中forEach()方法
  6. 为什么range不是迭代器?range到底是什么类型? 1
  7. Discuz!论坛Tools工具箱功能详解
  8. 既节能又省钱的数据中心布线解决方案
  9. VMware虚拟机安装Windows95教程和Windows3.1iso制作
  10. matlab中repmat函数的用法