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的更多相关文章

  1. zoj 2071 Technology Trader 最大权闭合子图

    传送门 和上一题一样, 也是一个最大权闭合子图.不过建图好麻烦的感觉  写了好久. 源点和原材料连边, 权值为val. 汇点和产品连边, 权值为val. 产品与和它有关系的材料连边, 权值inf. 最 ...

  2. [转] POJ图论入门

    最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...

  3. Soj题目分类

    -----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...

  4. 图论常用算法之一 POJ图论题集【转载】

    POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:h ...

  5. 设计模式之美:Product Trader(操盘手)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Product Trader 的示例实现. 意图 使客户程序可以通过命名抽象超类和给定规约来创建对象. Product Trad ...

  6. 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 ...

  7. What Can Java Technology Do?

    What Can Java Technology Do? The general-purpose(多用途的), high-level Java programming language is a po ...

  8. 【译】About the Java Technology

    About the Java Technology Java technology is both a programming language and a platform. The Java Pr ...

  9. Process Kill Technology && Process Protection Against In Linux

    目录 . 引言 . Kill Process By Kill Command && SIGNAL . Kill Process By Resource Limits . Kill Pr ...

随机推荐

  1. 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 ...

  2. JDBC操作数据库 封装好的工具类

    mysql sqlserver oracle 数据库的驱动jar包http://download.csdn.net/download/csdn576038874/8833683package cn.h ...

  3. JS获取URL的参数

    function request(paras) { var url = location.href; , url.length).split("&"); var paraO ...

  4. Java-struts2 配置hellow world

    这里进行struts框架的配置问题,和简单的输出hellow world 配置的步骤 1.      配置TomCat 2.      Jak 3.      拷贝struts.xml文件到src目录 ...

  5. 单点登录SSO原理

    最近接触了一点单点登录的知识,有一点理解,记录一下.有些问题并没有找到完美的解决方法,还需要找点已有框架来看看. 欢迎留言探讨. 1       概念 1.1     概念及理解 有一个网上广为流传的 ...

  6. [Mime] QuotedPrintableEncoding帮助类 (转载)

    点击下载 QuotedPrintableEncoding.rar 这个类是关于QuotedPrintableEncoding的帮助类看下面代码吧 /// <summary> /// 类说明 ...

  7. SOCKET,TCP/UDP,HTTP,FTP

    (一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...

  8. C# 跨线程调用问题

    纠结了好久,终于知道了winform和WPF的UI的跨线程调用的解决方法: winform下如果为了省事,可以直接禁用跨线程检查: Control.CheckForIllegalCrossThread ...

  9. SQL生成一柱双色球

    数据库环境:SQL SERVER 2005 以前用C/JAVA穷举双色球的所有排列,今天想着换成用SQL实现,只生成一柱双色球. 简单说下双色球的规则,双色球由红色球和蓝色球组成,每注投注号码由6个红 ...

  10. xcode7启动页的尺寸设置

    iPhone Portrait iOS 8,9-Retina HD 5.5 (1242×2208) @3x iPhone Portrait iOS 8,9-Retina HD 4.7 (750×133 ...