Description

Open-pit mining is a surface mining technique of extracting rock or minerals from the earth by their removal from an open pit or borrow. Open-pit mines are used when deposits of commercially useful minerals or rocks are found near the surface. Automatic Computer Mining (ACM) is a company that would like to maximize its profits by open-pit mining. ACM has hired you to write a program that will determine the maximum profit it can achieve given the description of a piece of land.

Each piece of land is modelled as a set of blocks of material. Block i has an associated value (vi), as well as a cost (ci), to dig that block from the land. Some blocks obstruct or bury other blocks. So for example if block i is obstructed by blocks j and k, then one must first dig up blocks j and k before block i can be dug up. A block can be dug up when it has no other blocks obstructing it.

Input

The first line of input is an integer N(1≤N≤200)N(1≤N≤200) which is the number of blocks. These blocks are numbered 1 through N. Then follow N lines describing these blocks. The ith such line describes block i and starts with two integers vi, ci denoting the value and cost of the ith block (0≤vi,ci≤200)(0≤vi,ci≤200) . Then a third integer 0≤mi≤N−10≤mi≤N−1 on this line describes the number of blocks that block i obstructs. Following that are mi distinct space separated integers between 1 and N (but excluding i) denoting the label(s) of the blocks that block i obstructs. You may assume that it is possible to dig up every block for some digging order. The sum of values mi over all blocks i will be at most 500.

Output

Output a single integer giving the maximum profit that ACM can achieve from the given piece of land.

Sample Input

5
0 3 2 2 3
1 3 2 4 5
4 8 1 4
5 3 0
9 2 0

Sample Output

2

Hint

数论:网络流:最大权闭合子图,模板题

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>  
using namespace std;  
typedef long long ll;  
const int N=1e6+5;  
const int INF=0x3f3f3f3f;  
  
struct node{  
    ll t,cap,flow,next;    
}e[N];  
int head[N],cur[N],cnt; 
void init(){  
    memset(head,-1,sizeof(head));  
    cnt=0;  
}  
void add(int u,int v,ll cap)  
{  
    e[cnt]=node{v,cap,0,head[u]};  
    head[u]=cnt++;  
    e[cnt]=node{u,0,0,head[v]};    
    head[v]=cnt++;  
}  
int d[N];   
bool bfs(int s,int t)   //O(n+m)  
{  
    memset(d,0,sizeof(d));  
    queue<int>q;  
    q.push(s);  
    d[s]=1;  
    while(!q.empty())  
    {  
        int u=q.front();q.pop();  
        for(int i=head[u];~i;i=e[i].next)  
        {  
            int v=e[i].t;  
            if(d[v]==0&&e[i].cap-e[i].flow>0)  
            {  
                d[v]=d[u]+1;  
                q.push(v);  
            }  
        }  
    }  
    return d[t]>0;   
}  
ll dfs(int s,int t,ll minedge)  
{  
    if(s==t)return minedge;  
    ll flow=0;    
    for(int &i=cur[s];~i;i=e[i].next)  
    {  
        int v=e[i].t;  
        if(d[v]==d[s]+1&&e[i].cap-e[i].flow>0)  
        {  
            ll temp=dfs(v,t,min(minedge-flow,e[i].cap-e[i].flow));  
            e[i].flow+=temp;    
            e[i^1].flow-=temp;  
            flow+=temp;  
            if(flow==minedge)return flow;  
        }  
    }  
    if(flow==0)d[s]=0;    
    return flow;  
}  
ll dinic(int s,int t) 
{  
    ll maxflow=0;  
    while(bfs(s,t))     
    {  
        memcpy(cur,head,sizeof(head));   
        maxflow+=dfs(s,t,INF);  
    }  
    return maxflow;  
}  
int pro[220];  
int main()  
{  
    int n,u,v,x,k;  
    init();  
    scanf("%d",&n);  
    for(int i=1;i<=n;i++)  
    {  
        scanf("%d%d%d",&u,&v,&k);  
        pro[i]=u-v;  
        while(k--){  
            scanf("%d",&x);  
            add(x,i,INF);  
        }  
    }  
    ll sum=0;  
    for(int i=1;i<=n;i++)  
    {  
        if(pro[i]>0){  
            add(0,i,pro[i]);  
            sum+=pro[i];  
        }  
        else if(pro[i]<0)add(i,n+1,-pro[i]);  
    }  
    int ans=dinic(0,n+1);  
    cout<<sum-ans<<endl;  
    return 0;  
}

Open-Pit Mining的更多相关文章

  1. 正则表达式和文本挖掘(Text Mining)

    在进行文本挖掘时,TSQL中的通配符(Wildchar)显得功能不足,这时,使用“CLR+正则表达式”是非常不错的选择,正则表达式看似非常复杂,但,万变不离其宗,熟练掌握正则表达式的元数据,就能熟练和 ...

  2. Call for Papers IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM)

    IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 In ...

  3. Distributed Databases and Data Mining: Class timetable

    Course textbooks Text 1: M. T. Oszu and P. Valduriez, Principles of Distributed Database Systems, 2n ...

  4. coursera 公开课 文本挖掘和分析(text mining and analytics) week 1 笔记

    一.课程简介: text mining and analytics 是一门在coursera上的公开课,由美国伊利诺伊大学香槟分校(UIUC)计算机系教授 chengxiang zhai 讲授,公开课 ...

  5. What is the most common software of data mining? (整理中)

    What is the most common software of data mining? 1 Orange? 2 Weka? 3 Apache mahout? 4 Rapidminer? 5 ...

  6. POJ 2948 Martian Mining

    Martian Mining Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2251 Accepted: 1367 Descri ...

  7. What’s the difference between data mining and data warehousing?

    Data mining is the process of finding patterns in a given data set. These patterns can often provide ...

  8. A web crawler design for data mining

    Abstract The content of the web has increasingly become a focus for academic research. Computer prog ...

  9. Datasets for Data Mining and Data Science

    https://github.com/mattbane/RecommenderSystem http://grouplens.org/datasets/movielens/ KDDCUP-2012官网 ...

随机推荐

  1. Linux系统中nc工具那些不为人知的用法

    Linux nc命令用法 参考地址:https://www.cnblogs.com/jjzd/p/6306273.html -g<网关>:设置路由器跃程通信网关,最多设置8个; -G< ...

  2. C++对象模型结论

    C++对象模型 1.C++对象模型探讨的是对象成员存储问题. 2.结论: (1) .类内部的函数(静态成员函数,非静态成员函数)都不在对象内部 ,不占用对象大小. (2) 类内部的静态变量不占用对象大 ...

  3. php的精度计算问题(bcadd和bcsub)

    一.前言 我们在进行php开发的时候经常会遇到浮点型的问题,特别是涉及金额的部分,常常需要进行加减运算.当小数点的位数比较多的时候,往往容易犯一些很低级的错误.这里记录一下php的精度计算和封装的小d ...

  4. 使用iis反向代理.net core应用程序

    .net core 其实是自宿主性质的web应用程序,而不再是web网站,所以.net core是可以直接单独作为系统服务部署.但是实际情况中,为了同个一个端口能支持多个web应用和统一管理,还是应该 ...

  5. 0MQ是会阻塞的,不要字面上看到队列就等同非阻塞。

    如果你是希望通过0MQ来做缓冲队列,非阻塞的效果,那你就必须清楚 0MQ Socket是会阻塞,你要搞清楚0MQ Socket与队列的关系. 官方协议文档规定了,一部分类型的 0MQ Socket为不 ...

  6. python-语言元素

    变量命令 对于每个变量我们需要给它取一个名字.在python中,变量命名需要遵循一下这些必须遵守硬性规则和强烈建议遵守的非硬性规则. 硬性规则 变量名由字母(广义的Unicode字符,不包括特殊字符) ...

  7. HTML字符实体(Character Entities)与 转义字符串(Escape Sequence)(转)

    为什么要用转义字符串?HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希望 ...

  8. NTP服务搭建详解一条龙

    说在前面:ntp和ntpdate区别 ①两个服务都是centos自带的(centos7中不自带ntp).ntp的安装包名是ntp,ntpdate的安装包是ntpdate.他们并非由一个安装包提供. ② ...

  9. C博客作业05--2019-指针

    0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 1.2 本章学习体会 2.PTA实验作业 2.16 -7 输出月份英文名 2.1.1 伪代码 char* getmonth(int n) { ...

  10. yum运行报错:File "/usr/libexec/urlgrabber-ext-down", line 28

    [root@sdw1 bin]# vim /usr/libexec/urlgrabber-ext-down 再次执行yum命令,正常下载