角色扮演

题意:

有n种技能,每个技能有两个属性,分别对应着物理伤害,魔法伤害,现在有m个连招,如果连续两个技能都选择同一种属性就会得到一个属性加成,否则就会丢失一些伤害,现在需要使得伤害最大化,求这个最大的伤害。

题解:

因为两个属性物理或者魔法只能选择一种属性,那么很容易就想到最小割,那么再用总伤害减去最小割就是最大的技能伤害,但是对于伤害加成和伤害丢失怎么办呢?有一种建图方式。

注:S 到 p1的容量是AP(魔法)加成 + 伤害丢失 , p2 到 T的容量是AD(物理)加成 + 伤害丢失。

代码:

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int M = 1e6 + 7;
const int N = 1e6 + 7;
const int INF = (1 << 31) - 1;
struct edge
{
	int v, c, f, nxt;
} e[M << 1];
LL sum;
int vis[N], S, T, ecnt, head[N], dep[N], cur[N], n, m;

void adde (int u, int v, int c)
{
	e[ecnt] = (edge) {v, c, 0, head[u]}, head[u] = ecnt++;
	e[ecnt] = (edge) {u, 0, 0, head[v]}, head[v] = ecnt++;
}

int BFS (int S)
{
	queue <int> q;
	q.push(S);
	memset (vis, 0, sizeof vis);
	vis[S] = 1, dep[S] = 0;
	while (!q.empty())
	{
		int u = q.front();
		q.pop();
		for (int it = head[u]; it != -1; it = e[it].nxt)
		{
			int v = e[it].v;
			if (!vis[v] && e[it].c > e[it].f)
			{
				vis[v] = 1;
				dep[v] = dep[u] + 1;
				q.push(v);
			}
		}
	}
	return vis[T];
}

LL DFS (int u, LL flow)
{
	if (u == T || flow == 0) return flow;
	LL tot = 0, F;
	for (int it = cur[u]; it != -1; it = e[it].nxt)
	{
		cur[u] = it;
		int v = e[it].v;
		if (dep[u] + 1 == dep[v] && (F = DFS(v, min(flow, (LL) e[it].c - e[it].f))) > 0)
		{
			e[it].f += F;
			e[it ^ 1].f -= F;
			tot += F;
			flow -= F;
			if (flow == 0) break;
		}
	}
	return tot;
}

LL dinic ()
{
	LL maxf = 0;
	while (BFS(S))
	{
		for (int i = 0; i <= T; ++ i) cur[i] = head[i];
		maxf += DFS(S, INF);
	}
	return maxf;
}

int main ()
{
	memset (head, -1, sizeof head);
	scanf ("%d%d", &n, &m);
	T = 2 * m + n + 1;
	for (int i = 1; i <= n; ++ i)
	{
		int P, D;
		scanf ("%d%d", &P, &D);
		sum += P + D;
		adde (S, i, P);
		adde (i, T, D);
	}
	int tmp = n + 1;
	for (int i = 1; i <= m; ++ i)
	{
		int u, v, P, D, z;
		scanf ("%d%d%d%d%d", &u, &v, &D, &P, &z);
		sum += P + D + z;
		adde (S, tmp, P + z);
		adde (tmp, u, INF);
		adde (tmp, v, INF);
		++tmp;
		adde (u, tmp, INF);
		adde (v, tmp, INF);
		adde (tmp, T, D + z);
		++tmp;
	}
	cout << sum - dinic() << endl;
	return 0;
}

  

时间: 2024-10-22 05:44:43

角色扮演的相关文章

团队作业---软件需求分析之角色扮演

角色扮演:小学生 由于小学生希望全面提高自己运算能力,希望能够接触到多种题型和训练方法,站在小学生的角度,所以,新四则运算小程序的亮点是:全面检测小学生的运算能力,可以多方面.多题型的调出运算题目,可以很好的锻炼和检测小学生的运算能力,并且,还可以记录.分析错题的原因和做题思考过程,举一反三,事半功倍. 编号        名称            重要性                                             初始估算 01         出题      

cocos2dx游戏--三国关羽传【角色扮演类】Demo的制作及实现

项目地址:https://github.com/moonlightpoet/GuanYuZhuan 主要类及其对应效果: MainScene:菜单界面(用于选择不同剧本) StoryScene:故事界面(对应于不同的剧本) FightScene:战斗界面(对应对战斗的界面,不过做的很简略,基本上就是主人公(关羽)打一下人后敌人就死了,然后进入了胜利界面) SucceedScene:胜利界面(用于显示胜利,并返回菜单界面)

探讨DDD中角色权限与DCI的使用

本文初衷 之前在学习DDD的时候,一直被权限与角色困扰. 我们知道在Asp.net MVC 的Controller或Action加上特性标签[Authorize],就可以实现权限控制. [Authorize(Roles ="Manager")] public class MainController : Controller { // GET: Main public ActionResult Index() { return View(); } } 但是在应用层中,如何使用好角色?在

角色对象模式

意图 单个对象透过不同的角色对象来满足不同客户的不同需求.每一个角色对象针对不同的客户内容来扮演其角色.对象能够动态的管理其角色集合.角色作为独立的对象是的不同的内容能够简单的被分离开来,系统间的配置也变得容易. 译注:为了行文的流畅性及内容意思的准确性,尽量贴近原文使用英文单词标记特定内容, 如Customer表示客户,Client表示客户端,Component表示组件等.因为有各种图例说明,所以在图例说明时,使用原题中的英文单词对应图中内容.有时也中英文交叉使用.因为网页显示的问题,中文黑体

Unity手游之路&lt;七&gt;角色控制器

向原创致敬http://blog.csdn.net/janeky/article/details/17406095 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作,实现我们所期望的功能.今天我们就一起系统来学习相关的内容吧. Charactor Controller(角色控制器) "角色控制器允许你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体.角色控制器不受力的影响,仅仅当你调用Mov

51nod 1489 蜥蜴和地下室

题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 哈利喜欢玩角色扮演的电脑游戏<蜥蜴和地下室>.此时,他正在扮演一个魔术师.在最后一关,他必须和一排的弓箭手战斗.他唯一能消灭他们的办法是一个火球咒语.如果哈利用他的火球咒语攻击第i个弓箭手(他们从左到右标记),这个弓箭手会失去a点生命值.同时,这个咒语使与第i个弓箭手左右相邻的弓箭手(如果存在)分别失去b(1 ≤ b < a ≤ 10)点生命值. 因为两个端点的弓箭手(即

unity3d 项目源码下载链接

2-1 炉石传说 客户端加服务器端 链接:http://pan.baidu.com/s/1dDKY3Fr 密码:c03q 2-2 新仙剑奇侠传 链接:http://pan.baidu.com/s/1b4QVqI 密码:dic5 2-3 unity3d 战斗卡牌<变身吧主公>客户端+服务器源码 链接:http://pan.baidu.com/s/1kUpot51 密码:i02u 2-4 降临OL-U3D全套源码 链接:http://pan.baidu.com/s/1sktLQ5v 密码:we0g

《游戏架构设计与策划基础》笔记 第一章 游戏策划概述(上)

1.1 什么是游戏策划 游戏的目的就是通过玩来获得娱乐,因此,设计游戏既需要艺术家一样的创造力,也需要工程师一样的精心规划.游戏设计是一门手艺,就像是好莱坞的电影摄像或服装设计一样.一个游戏既含有艺术要素,也含有功能要素:它必须能给人以美的享受,同时又必须能很好地运行,让游戏者享受到快乐.具备这两种特点的游戏才是好的游戏. 1.2 游戏策划的任务 游戏策划根据自己的创作理念,结合市场调研得来的数据,参考其他开发人员的意见和建议,在开发条件允许的基础上,将游戏创意以及游戏内容和规则细化完整,形成策

数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)

第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于 一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问题.通过数据切分来提高网站性能,横向 扩展数据层已经成为架构研发人员首选的方式. 水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失: 负载均衡策略:可以降低单台机器的访问负载,降低宕机的可能性: 集群方案:解决了数据库宕机带来的单点数据库不能访问的问题: 读写分离策略:最大