COGS 2091. Asm.Def的打击序列
★★★ 输入文件: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=,to[N<<],fa[N],DIS[N],came[N],flow[N<<],val[N<<],head[N],nextt[N<<];
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]=;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]=;
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=,T=n<<|;
int ans=,left=n;
for(int s,t,v;m--;)
{
scanf("%d%d%d",&s,&t,&v);
if(v>=c) continue;
ins(s,t+n,,v);
}
for(int i=;i<=n;++i)
{
ins(S,i,,);
ins(S,i+n,,c);
ins(i+n,T,,);
}
while(spfa())
{
int t=came[T];
for(int i=T;i!=S&&i;i=to[fa[i]^])
{
flow[fa[i]]-=t;
flow[fa[i]^]+=t;
}
ans+=t*DIS[T];
}
printf("%d\n",ans);
return ;
}
COGS 2091. Asm.Def的打击序列的更多相关文章
- COGS——T2084. Asm.Def的基本算法
http://cogs.pro/cogs/problem/problem.php?pid=2084 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间 ...
- COGS——C2098. Asm.Def的病毒
http://www.cogs.pro/cogs/problem/problem.php?pid=2098 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out ...
- cogs——2098. Asm.Def的病毒
2098. Asm.Def的病毒 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “这就 ...
- COGS 2084. Asm.Def的基本算法
★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “有句美国俗语说,如果走起来像鸭子,叫起来像 ...
- COGS 2082. Asm.Def谈笑风生
★ 输入文件:asm_talk.in 输出文件:asm_talk.out 简单对比时间限制:2 s 内存限制:256 MB [题目描述] “人呐都不知道,自己不可以预料,直升机刚一出圣 ...
- COGS 2098. Asm.Def的病毒
★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “这就是我们最新研制的,世界上第一种可持 ...
- cogs——2084. Asm.Def的基本算法
2084. Asm.Def的基本算法 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “有句 ...
- cogs 2098. [SYOI 2015] Asm.Def的病毒 LCA 求两条路径是否相交
2098. [SYOI 2015] Asm.Def的病毒 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 M ...
- COGS2085 Asm.Def的一秒
时间限制:1 s 内存限制:256 MB [题目描述] “你们搞的这个导弹啊,excited!” Asm.Def通过数据链发送了算出的疑似目标位置,几分钟后,成群结队的巡航导弹从“无蛤”号头顶掠过 ...
随机推荐
- C++_引用变量探究
什么是引用 引用变量是已定义变量的别名. 如何定义引用变量: int rats; int & rodents = rats; 其中&不失地址运算符,而是类型标识符的一部分.就行声明ch ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_元数据
1.元数据简介 全称:metadata 属性:数据表集合 产地:面向 CLR 的编译器在托管模块中生成 2.元数据内部结构及与托管模块的关系 [概述] 托管模块中包含着元数据,元数据是由一组数据表组成 ...
- 1005 继续(3n+1)猜想(25 分)
卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ...
- photoshop中魔棒工具的使用
魔术棒工具一般用于纯色背景快速扣图,打开魔术棒工具,设定容差,点击选定背景,清除,文件-保存为png格式图片.ok! 魔棒工具是photoshop中提供的一种比较快捷的抠图工具,对于一些分界线比较明显 ...
- python自动化day2-列表、字典、集合
一.数据类型 1.什么是数据? x=10,10是我们要存储的数据 2.为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3 数据类型 数字(整形,长整形,浮点型, ...
- Java RESTful框架的性能比较
https://colobu.com/2015/11/17/Jax-RS-Performance-Comparison/
- PHP、thinkPHP5.0开发网站文件管理功能(一)显示文件
显示文件用到的函数有 1.urlencode($str):编码URL字符串,便于将字符串编码并将其用于URL的请求部分 2.urldecode($str):解码已经编码的URL字符串,返回解码后的字符 ...
- Angular JS ng-model对<select>标签无效的情况
使用场景一: <select ng-if="item.award_type==1" id="award{{$index+1}}" name="X ...
- java——为什么要有接口?和抽象类有什么不一样?
1.接口不是类,为什么? 接口如果是类,那就失去了java引入接口的意义了. java之所以引入接口,就是为了弥补不能多继承的缺点,在java中每个类只能有一个超类,但却可以实现多个接口. 2.接口可 ...
- python django bootstrap_导入 201901
参考 http://www.liujiangblog.com/course/django/124 AdminLTE-2.4.5 http://www.liujiangblog.com/course/d ...