【题目描述】

Alice和Bob正在玩如下的游戏。首先Alice画一个有N个顶点,M条边的有向图。然后Bob试着摧毁它。在一次操作中他可以找到图中的一个点,并且删除它所有的入边或所有的出边。

Alice给每个点定义了两个值:Wi+和Wi-。如果Bob删除了第i个点所有的入边他要给Alice付Wi+元,如果他删除了所有的出边就需要给Alice付Wi元。

找到Bob删除图中所有边需要的最小花费。

【输入格式】

输入数据描述了Alice画下的图。

输入文件的第一行有两个数N,M(1<=N<=100,1<=M<=5000)。第二行有N个整数,描述了N个点的Wi+,同样的第三行是这N个点的Wi-。所有的费用都是正数并且不超过10^6。接下来的M行每行有两个数,代表有向图中相应的一条边。

【输出格式】

输出一行一个整数,即Bob的最小花费。

【分析】

很容易想到,把每个点拆成两个点,一个控制出边,一个控制入边,保留原边后很明显的一个最小权点覆盖集,Dinic就行了。

 #include <cstdlib>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
const int maxn=;
const int INF=*;
using namespace std;
struct tu
{
int c,f;
tu(){c=;f=;}
}maps[maxn][maxn];
int dist[maxn],n,m; void Dinic();
bool BFS();//构建层次网络
int dfs(int v,int low); int main()
{
int i;
//文件操作
freopen("destroyingthegraph.in","r",stdin);
freopen("destroyingthegraph.out","w",stdout);
memset(maps,,sizeof(maps)); scanf("%d%d",&n,&m);//n个点,m条边 for (i=;i<=n;i++) scanf("%d",&maps[i+n][*n+].c);//w+
for (i=;i<=n;i++) scanf("%d",&maps[][i].c);//w- for (i=;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
maps[u][v+n].c=INF;
}
Dinic();
return ;
}
void Dinic()
{
int flow=;
while ( BFS() )
{
int temp=;
if (temp=dfs(,INF)) flow+=temp;
}
printf("%d\n",flow);
}
bool BFS()//层次网络
{
queue<int>Q;
int i;
memset(dist,-,sizeof(dist));
dist[]=;
Q.push();
while (!Q.empty())
{
int u=Q.front();Q.pop();
for (i=;i<=(*n+);i++)
{
int v=i;
if(maps[u][v].c-maps[u][v].f> && dist[v]==-)
{
dist[v]=dist[u]+;
Q.push(v);
}
}
}
return (dist[(*n)+]!=-);
}
int dfs(int u,int low)
{
if (u==(*n)+ || low==) return low;
int flow=,f,i;
for (i=;i<=(*n)+;i++)
{
int v=i;
if (maps[u][v].c>maps[u][v].f && dist[v]==dist[u]+)
{
if (f=dfs(i,min(low,maps[u][v].c-maps[u][v].f)))
{
maps[u][v].f+=f;
maps[v][u].f-=f;
low-=f;
flow+=f;
if (low==) break;
}
}
}
return flow;
}

【NEERC 2003】有向图破坏的更多相关文章

  1. 【中途相遇+二进制】【NEERC 2003】Jurassic Remains

    例题25  侏罗纪(Jurassic Remains, NEERC 2003, LA 2965) 给定n个大写字母组成的字符串.选择尽量多的串,使得每个大写字母都能出现偶数次. [输入格式] 输入包含 ...

  2. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  3. AD域的安装(在Windows Server 2003中安装Active Directory)

    在Active Directory中提供了一组服务器作为身份验证服务器或登录服务器,这类服务器被称作域控制器(Domain Controller,简称DC).建立一个AD域的过程实际就是在一台运行Wi ...

  4. WIN 2003服务器终极安全及问题解决方案

    一.硬盘分区与操 作系统的安装硬盘分区 总的来讲在硬盘分区上面没什么值得深入剖析的地方,无非就是一个在分区前做好规划知道要去放些什么东西, 如果实在不知 道.那就只一个硬盘只分一个区,分区要一次性完成 ...

  5. delete this及堆破坏检测方法

    作者: Bruce   日期: 2012年06月03日 04:20 周日 发表评论 (0) 查看评论 --END*1--> 0 条评论 --END*2-->1,837 人阅读   程序BU ...

  6. Windows 2003 Server 标准版启动问题解决(资源转贴)

    维护的系统之一是部署在windows2003 Server标准版的服务器上,可能是由于某个应用问题,导致远程重启失败,害得我在机房呆了一早晨,可算是够折腾的.最后按照官方文档解决,刚放文档地址是:ht ...

  7. 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件

    以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件 2007/10/29 Mark BukovecEmpire Down Development 适用于:Mi ...

  8. Tarjan求有向图强连通详解

    Tarjan求有向图强连通详解 注*该文章为转发,原文出处已经不得而知 :first-child { margin-top: 0; } blockquote > :last-child { ma ...

  9. POJ 2337 Catenyms (有向图欧拉路径,求字典序最小的解)

    Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8756   Accepted: 2306 Descript ...

随机推荐

  1. javascript 基础学习整理 二 之 html对象总结,参考W3C

    Anchor 对象 更改一个链接的文本.URL 以及 target 使用 focus() 和 blur() 向超链接添加快捷键 Document 对象 使用 document.write() 向输出流 ...

  2. ACM生活总结

    两年ACM生活总结 转眼已经踏入ACM这条不归路已经两年了, 深深的感觉到ACM的不易 和 艰辛,但同时ACM给我所带来的快乐,让我认为值一切都是值得的. 我刚上大学那会,我们学校的ACM刚刚起步不到 ...

  3. 【转】Android低功耗蓝牙应用开发获取的服务UUID

    原文网址:http://blog.csdn.net/zhangjs0322/article/details/39048939 Android低功耗蓝牙应用程序开始时获取到的蓝牙血压计所有服务的UUID ...

  4. 【转】中兴G718C卡刷刷机教程(青漾2 4G)--不错

    原文网址:http://www.zterom.com/guide/2278.html 刷机包 B11纯净版 适合长久使用_B11_lite_0130.zip 刷机用了20多分钟. 在和大家分享过中兴G ...

  5. 【转】Jollen 的 Android 教學,#12: 如何建立選單 Menu

    原文网址:http://www.jollen.org/blog/2009/06/jollen-android-programming-12.html Android應用程式的UI可以使用XML來定義, ...

  6. 数据结构(虚树,动态规划):HNOI 2014 世界树

    Hnoi2014 世界树 Description 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平 ...

  7. bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2202  Solved: 1226[Submit][Sta ...

  8. 继续畅通工程(kruskal prim)

    kruskal算法   #include <cstdio > #include <algorithm> using namespace std; const int MaxSi ...

  9. [Hibernate] 基本增删查改

    本文记录,Java 应用通过 Hibernate 对数据库 MySQL 进行基本的增删改查操作,即CRUD. 本例子的目录结构如下 hibernate.cfg.xml 存储数据库信息,如数据库类型,账 ...

  10. 每个项目单独配置 git 用户

    git多账号登陆问题 设置git全局设置: git config --global user.name "your_name"  git config --global user. ...