题意:有n个人,每个人有两个能力值,选a个人用它的第一个能力值,b个人用它的第二个能力值,每个人只能选一次,求一个方案使得能力值之和最大,并输出选择方案.

题解:最小费用最大流,原点1向n个人每个人i+1连流量为1费用为0的边,在有两个点n+2和n+3,每个人i+1向点n+2连流量为1,费用为-能量值的边,向n+3连流量为1,费用为-能力值的边,n+2向汇点n+4连流量为a费用为0的边,n+3向汇点n+4连流量为b费用为0的边.

注意:应该在跑完了费用流之后再输出路径,因为在过程之后总有可能有反向边,所以无法在过程中就确定最终路径.跑完了费用流之后,如果某一条边反向流不为0即表示有流量经过.

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<climits>
#include<queue>
#include<cmath>
#define MAXP 3010
#define MAXE 40500
#define MIN(a,b) (a<b?a:b)
using namespace std;
int n,m;
struct Edge
{
int s,t,f,c,next;
};
class MCMF
{
public:
MCMF(int s,int t);
void insert(int s,int t,int f,int c);
bool spfa();
void mcmf();
void print();
private:
bool *isq;
int s,t;
int *dist;
int ent;
int cost,flow;
int *head;
int *pre;
Edge *edge;
};
MCMF::MCMF(int s,int t)
{
this->s=s;
this->t=t;
ent=;
cost=;
flow=;
isq=new bool [MAXP];
dist=new int[MAXP];
head=new int[MAXP];
edge=new Edge[MAXE];
pre=new int[MAXE];
memset(head,-,sizeof(int)*MAXP);
}
void MCMF::insert(int s,int t,int f,int c)
{
edge[ent].s=s;edge[ent].t=t;edge[ent].f=f;
edge[ent].c=c;edge[ent].next=head[s];head[s]=ent++;
edge[ent].s=t;edge[ent].t=s;edge[ent].f=;
edge[ent].c=-c;edge[ent].next=head[t];head[t]=ent++;
}
bool MCMF::spfa()
{
memset(pre,-,sizeof(int)*MAXE);
for(int i=;i<=t;i++)
{
isq[i]=false;
dist[i]=INT_MAX;
}
queue<int>q;
q.push(s);
isq[s]=true;
dist[s]=;
while(!q.empty())
{
int temp1=q.front();
q.pop();
isq[temp1]=false;
for(int i=head[temp1];i!=-;i=edge[i].next)
{
int temp2=edge[i].t;
if(edge[i].f&&edge[i].c+dist[temp1]<dist[temp2])
{
dist[temp2]=edge[i].c+dist[temp1];
pre[temp2]=i;
if(!isq[temp2])
q.push(temp2);
}
}
}
return pre[t]!=-;
}
void MCMF::mcmf()
{
while(spfa())
{
int minn=INT_MAX;
for(int i=pre[t];i!=-;i=pre[i])
{
minn=MIN(minn,edge[i].f);
i=edge[i].s;
}
flow+=minn;
for(int i=pre[t];i!=-;i=pre[i])
{
edge[i].f-=minn;
edge[i^].f+=minn;
i=edge[i].s;
}
cost+=minn*dist[t];
}
cout<<-cost<<endl;
}
void MCMF::print()
{
for(int i=head[n+];i!=-;i=edge[i].next)
if(edge[i].f==&&edge[i].t!=n+)
printf("%d ",edge[i].t-);
printf("\n");
for(int i=head[n+];i!=-;i=edge[i].next)
if(edge[i].f==&&edge[i].t!=n+)
printf("%d ",edge[i].t-);
}
int a,b;
int main()
{
int s,t,c;
scanf("%d%d%d",&n,&a,&b);
MCMF *temp=new MCMF(,n+);
for(int i=;i<=n;i++)
temp->insert(,i+,,);
for(int i=;i<=n;i++)
{
scanf("%d",&m);
temp->insert(i+,n+,,-m);
}
for(int i=;i<=n;i++)
{
scanf("%d",&m);
temp->insert(i+,n+,,-m);
}
temp->insert(n+,n+,a,);
temp->insert(n+,n+,b,);
temp->mcmf();
temp->print();
return ;
}

cf 730i的更多相关文章

  1. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  2. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  3. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  4. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  5. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  6. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  7. CF memsql Start[c]UP 2.0 B

    CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...

  8. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

  9. CF #375 (Div. 2) D. bfs

    1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...

随机推荐

  1. 可重入锁 公平锁 读写锁、CLH队列、CLH队列锁、自旋锁、排队自旋锁、MCS锁、CLH锁

    1.可重入锁 如果锁具备可重入性,则称作为可重入锁. ========================================== (转)可重入和不可重入 2011-10-04 21:38 这 ...

  2. 使用Visual Studio调试用户模式进程(Debugging a User-Mode Process Using Visual Studio)

    由于本人能力有限,翻译不足之处敬请谅解,欢迎批评指正:sunylat@163.com Visual Studio版本:Visual Studio 2015企业版,中文环境. MSDN原文:https: ...

  3. selenium + phantomjs 爬取落网音乐

    题记: 作为一个业余程序猿,最大的爱好就是电影和音乐了,听音乐当然要来点有档次的.落网的音乐的逼格有点高,一听听了10年.学习python一久了,于是想用python技术把落网的音乐爬下来随便听. 目 ...

  4. jQuery MiniUI开发系列之:安装部署

    jQuery MiniUI是一套纯Javascript的WebUI控件库,它由几十个Javascript控件组成,是不依赖服务端和数据库的. 下载jQuery MiniUI,解压缩后,开发者可以直接在 ...

  5. (转)设计模式_Singleton单例模式

    静态初始化 public sealed class Singleton { private static readonly Singleton instance = new Singleton(); ...

  6. java中static 和 final 的一些使用规则

    一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...

  7. sqlserver 2008 建立订阅发布时 报错 解决方案 “错误 2812” 无法创建存储过程

    11月10日早上  一大早,还在地铁14号线上 ,接到同事给的信息 说我们的XX系统宕机了,本想没什么问题,一般服务器 只要硬件没有问题 重启一下就可以了, 但是事与愿违,偏偏最后检测到服务器磁盘阵列 ...

  8. eworkflow工作流系统在iis中发布

    eworkflow工作流系统在iis中发布 win7下面的iis发布eworkflow工作流系统,要带虚拟目录的,如发布成http://localhost/eworkflow/login.aspx这样 ...

  9. 部署Service Manager 2012遇到的2个问题

    上周装了个Service Manager 2012学习,以便完善System Center整个解决方案,在部署期间遇到2个问题,花了我不少时间解决.一.安装时提示“执行自定义操作时失败”每当到了安装的 ...

  10. 所有古诗词的api

    服务商:api.getlove.cn 分类:诗词 更新时间:2016-03 如果接口不满足您的要求,您可以联系qq:2265658022购买完整的数据库 免费apikey:56eab527a0facb ...