Harmonious Army】的更多相关文章

Harmonious Army Now, Bob is playing an interesting game in which he is a general of a harmonious army. There are n soldiers in this army. Each soldier should be in one of the two occupations, Mage or Warrior. There are m pairs of soldiers having comb…
题目链接 传送门 题意 有\(n\)个士兵,要你给他们分配职业.有\(m\)对关系,对于某一对关系\(u,v\),如果同为勇士则总能力增加\(a\),同法师则增加\(c\),一个勇士一个法师增加\(\frac{a}{4}+\frac{c}{3}\),要你求最大的总能力. 思路 这位大佬的博客讲的很详细,大家可以看这篇博客- 在他的基础上加了点优化:源与某个点可能会连很多条边,因此我们可以汇总起来最后一次连边,汇同理,中间的反向边我们可以不用建\(0\)的边. 代码实现如下 #include <s…
N个人 每个人可以是战士/法师  M个组合 每个组合两个人 同是战士+a 同是法师+c 否则+b 对于每一个u,v,a,b,c 建(S,u,a) (u,v,a+c-2*b) (v,T,c) (S,v,a) (v,u,a+c-2*b) (u,T,c) 最后答案为(2*sum(a+c)-最大流)/2 思路可以参考洛谷P1361 #include<bits/stdc++.h> using namespace std; typedef long long ll; ; ; ], nxt[MAXM <…
参考博客https://blog.csdn.net/u013534123/article/details/97142191 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e5+50; int S,T,From[maxn],Laxt[maxn],Next[maxn],To[maxn]; ll Cap[maxn],cnt; int vd[maxn],dis[maxn]; void…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6598 题意是说一个军队有n人,你可以给他们每个人安排战士或者法师的职业,有m对人有组合技,组合技的信息是A,B,C,代表如果这两个人是两个战士,则组合技威力为A,一个战士一个法师,威力为B,其中B=A/4+C/3,两个法师,威力为C,求最大的威力. 很网络流的题目,那就流呗XD 先考虑如果每个人可以选择两个职业,则威力为$sum=\sum_{i=1}^{n}(a[i]+b[i]+c[i])$ 如果不…
http://acm.hdu.edu.cn/showproblem.php?pid=6598 一开始就觉得是网络流,但是一直都不会怎么建图. 这里要考虑. 每一组边(u,v,a,b,c)建立如下的连接: (s,u,a),(s,v,a),(u,t,c),(v,t,c),(u,v,a+c-2b) 这样,看看,每次最小割把这个切断的时候,要么切断2a,使得u,v同属于t,要么切断2c,使得u,v同属于s.再或者,斜着切断三条边,合计2a+2c-2b. 那么假如最小割的值是sum,那么 (a+c)-su…
题意: 一个军队有n人,你可以给他们每个人安排战士或者法师的职业,有m对人有组合技,组合技的信息是a,b,c,代表如果这两个人是两个战士,则组合技威力为a,一个战士一个法师,威力为b,其中b=a/4+c/3,两个法师,威力为c,求最大的威力. 题解: 这道题给出了一个最小割的清奇思路. 首先不去想边权,只想连通性,设源点为战士,汇点为法师,中间的点记为军队中的人,人和源点汇点之间连边,有组合技的人两两之间连边,简单起见,从只有两个人的情况讨论,这张图割完了只能是如下形式: (两个战士) (两个法…
题意:有n个人,每个人可以从A,B两种职业中选择一种 有m对两人组,如果两个人都是A能获得p的收益,一个A一个B能获得q的收益,都是B能获得r的收益,其中q=p/4+r/3,保证p%4=0,r%3=0 求最大总收益 n<=5e2,m<=1e4,p,q,r<=4e6 思路:主要是建图 求得一组等效解,答案即为所有边权之和减去最小割 S出发到i的流量总数和i出发到T的流量总数可以累加一下最后再加这两种边,边数可以少一点 #include<bits/stdc++.h> using…
题意: 有n个士兵,你可以选择让它成为战士还是法师. 有m对关系,u和v 如果同时为战士那么你可以获得a的权值 如果同时为法师,你可以获得c的权值, 如果一个为战士一个是法师,你可以获得b的权值 问你可以获得的最大权值是多少? 题解: 对每个士兵建立一个点x ,点x 向源点s 连一条边,向汇点t 连一条边, 分别表示选择两种职业,然后就可以先加上所有的贡献,通过两点关系用 最小割建模,如下图所示 设一条边的三种贡献为A, B, C,可以得到以下方程: 如果x,y都是法师,你可以获得C的权值,但是…
目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个士兵,每个士兵可以选择加入 A 组或 B 组. 有 m 个组合技可以增加整个军队的力量:第 i 个组合技涉及到士兵 ui 与 vi,当两人同时加入 A 组力量值增加 ai,同时加入 B 组力量值增加 ci,否则力量值增加 bi. 求每种安排士兵的方案中军队的力量值最大可以为多少. Input 多组数据. 每组数据开头包含两个正整数 n(n≤500) 和 m…