Technology Trader
zoj2071:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2071
题意:题意一些零件,每一个零件会有一个花费,然后用这些的零件可以生产一些产品,产品可以卖出一些钱,现在问你这些零件可以专区的额最大花费。
题解:零件和源点建立一边,容量为零件的费用,然后产品和汇点建立边,容量为产品的价值,然后零件盒产品之间建立相应的边,容量为INF,然后跑网络流,如果某产品和汇点之间的满流,说明,生产这样的产品赚取的费用是0,所以这样的产品是可以不成产的,所以,只要统计没有满流的安歇边就可以了。同时,这里的零件是可以购买多次的,也就是说,你可以买两个以上的相同零件用于生产不同的产品。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<map>
#define INF 100000000
using namespace std;
const int N=;
const int M=;
struct Node{
int v;
int f;
int next;
}edge[M];
int n,m,u,v,cnt,sx,ex;
int head[N],pre[N];
int ans[N],top;
struct Edge{
char str[];
int t;
int val;
char ss[][];
}num[N];
void init(){
cnt=;
memset(head,-,sizeof(head));
}
void add(int u,int v,int w){
edge[cnt].v=v;
edge[cnt].f=w;
edge[cnt].next=head[u];
head[u]=cnt++;
edge[cnt].f=;
edge[cnt].v=u;
edge[cnt].next=head[v];
head[v]=cnt++;
}
bool BFS(){
memset(pre,,sizeof(pre));
pre[sx]=;
queue<int>Q;
Q.push(sx);
while(!Q.empty()){
int d=Q.front();
Q.pop();
for(int i=head[d];i!=-;i=edge[i].next ){
if(edge[i].f&&!pre[edge[i].v]){
pre[edge[i].v]=pre[d]+;
Q.push(edge[i].v);
}
}
}
return pre[ex]>;
}
int dinic(int flow,int ps){
int f=flow;
if(ps==ex)return f;
for(int i=head[ps];i!=-;i=edge[i].next){
if(edge[i].f&&pre[edge[i].v]==pre[ps]+){
int a=edge[i].f;
int t=dinic(min(a,flow),edge[i].v);
edge[i].f-=t;
edge[i^].f+=t;
flow-=t;
if(flow<=)break;
} }
if(f-flow<=)pre[ps]=-;
return f-flow;
}
int solve(){
int sum=;
while(BFS())
sum+=dinic(INF,sx);
return sum;
}
char temp[];
int main() {
int T,k,sum1,sum2,t1,tt=;
scanf("%d",&T);
while(T--) {
if(tt>)puts("");
tt=;
scanf("%d",&n);
init();
map<string,int>mp1;
for(int i=;i<=n;i++){
scanf("%s%d",temp,&t1);
mp1[temp]=i;
add(,i,t1);
}
scanf("%d",&m);sum1=;
for(int i=;i<=m;i++){
scanf("%s%d%d",num[i].str,&t1,&num[i].t);
mp1[num[i].str]=i+n;
num[i].val=t1;
sum1+=t1;
add(i+n,n+m+,t1);
for(int j=;j<=num[i].t;j++){
scanf("%s",num[i].ss[j]);
add(mp1[num[i].ss[j]],i+n,INF);
}
}
sx=;ex=n+m+;top=;
printf("%d\n",sum1-solve());
for(int i=n+;i<=n+m;i++){
for(int j=head[i];j!=-;j=edge[j].next){
if(edge[j].f>&&edge[j].v==n+m+){
ans[++top]=i-n;
}
}
}
printf("%d\n",top);sum2=;
for(int i=;i<=top;i++){
printf("%s\n",num[ans[i]].str);
sum2+=num[ans[i]].t;
}
printf("%d\n",sum2);
for(int i=;i<=top;i++){
int ttt=num[ans[i]].t;
for(int j=;j<=ttt;j++)
printf("%s\n",num[ans[i]].ss[j]);
}
}
return ;
}
Technology Trader的更多相关文章
- zoj 2071 Technology Trader 最大权闭合子图
传送门 和上一题一样, 也是一个最大权闭合子图.不过建图好麻烦的感觉 写了好久. 源点和原材料连边, 权值为val. 汇点和产品连边, 权值为val. 产品与和它有关系的材料连边, 权值inf. 最 ...
- [转] POJ图论入门
最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...
- Soj题目分类
-----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...
- 图论常用算法之一 POJ图论题集【转载】
POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:h ...
- 设计模式之美:Product Trader(操盘手)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Product Trader 的示例实现. 意图 使客户程序可以通过命名抽象超类和给定规约来创建对象. Product Trad ...
- How Will Java Technology Change My Life?
How Will Java Technology Change My Life? We can't promise you fame, fortune, or even a job if you le ...
- What Can Java Technology Do?
What Can Java Technology Do? The general-purpose(多用途的), high-level Java programming language is a po ...
- 【译】About the Java Technology
About the Java Technology Java technology is both a programming language and a platform. The Java Pr ...
- Process Kill Technology && Process Protection Against In Linux
目录 . 引言 . Kill Process By Kill Command && SIGNAL . Kill Process By Resource Limits . Kill Pr ...
随机推荐
- DTrace to Troubleshoot Java Native Memory Problems
How to Use DTrace to Troubleshoot Java Native Memory Problems on Oracle Solaris 11 Hands-On Labs of ...
- JDBC操作数据库 封装好的工具类
mysql sqlserver oracle 数据库的驱动jar包http://download.csdn.net/download/csdn576038874/8833683package cn.h ...
- JS获取URL的参数
function request(paras) { var url = location.href; , url.length).split("&"); var paraO ...
- Java-struts2 配置hellow world
这里进行struts框架的配置问题,和简单的输出hellow world 配置的步骤 1. 配置TomCat 2. Jak 3. 拷贝struts.xml文件到src目录 ...
- 单点登录SSO原理
最近接触了一点单点登录的知识,有一点理解,记录一下.有些问题并没有找到完美的解决方法,还需要找点已有框架来看看. 欢迎留言探讨. 1 概念 1.1 概念及理解 有一个网上广为流传的 ...
- [Mime] QuotedPrintableEncoding帮助类 (转载)
点击下载 QuotedPrintableEncoding.rar 这个类是关于QuotedPrintableEncoding的帮助类看下面代码吧 /// <summary> /// 类说明 ...
- SOCKET,TCP/UDP,HTTP,FTP
(一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...
- C# 跨线程调用问题
纠结了好久,终于知道了winform和WPF的UI的跨线程调用的解决方法: winform下如果为了省事,可以直接禁用跨线程检查: Control.CheckForIllegalCrossThread ...
- SQL生成一柱双色球
数据库环境:SQL SERVER 2005 以前用C/JAVA穷举双色球的所有排列,今天想着换成用SQL实现,只生成一柱双色球. 简单说下双色球的规则,双色球由红色球和蓝色球组成,每注投注号码由6个红 ...
- xcode7启动页的尺寸设置
iPhone Portrait iOS 8,9-Retina HD 5.5 (1242×2208) @3x iPhone Portrait iOS 8,9-Retina HD 4.7 (750×133 ...