hdu 3879 方案选择

每日一水~~~

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <vector>
 4 #define oo 0x3f3f3f3f
 5 #define N 55010
 6 using namespace std;
 7
 8 struct Edge {
 9     int u, v, f;
10     Edge( int u, int v, int f ):u(u),v(v),f(f){}
11 };
12
13 int n, m, src, dst;
14 vector<Edge> edge;
15 vector<int> g[N];
16 int dep[N], cur[N], qu[N], bg, ed, idc;
17 int sump;
18
19 void init() {
20     for( int i=1; i<=n+m+2; i++ )
21         g[i].clear();
22     edge.clear();
23     sump = 0;
24     idc = 0;
25 }
26 void adde( int u, int v, int f ) {
27     g[u].push_back( edge.size() );
28     edge.push_back( Edge(u,v,f) );
29     g[v].push_back( edge.size() );
30     edge.push_back( Edge(v,u,0) );
31 }
32 bool bfs() {
33     memset( dep, 0, sizeof(dep) );
34     qu[bg=ed=1] = src;
35     dep[src] = 1;
36     while( bg<=ed ) {
37         int u=qu[bg++];
38         for( int t=0; t<g[u].size(); t++ ) {
39             Edge &e = edge[g[u][t]];
40             if( e.f && !dep[e.v] ) {
41                 dep[e.v] = dep[e.u] + 1;
42                 qu[++ed] = e.v;
43             }
44         }
45     }
46     return dep[dst];
47 }
48 int dfs( int u, int a ) {
49     if( u==dst || a==0 ) return a;
50     int remain=a, past=0, na;
51     for( int &t=cur[u]; t<g[u].size(); t++ ) {
52         Edge &e = edge[g[u][t]];
53         Edge &ve = edge[g[u][t]^1];
54         if( e.f && dep[e.v]==dep[e.u]+1 && (na=dfs(e.v,min(remain,e.f))) ) {
55             remain -= na;
56             past += na;
57             e.f -= na;
58             ve.f += na;
59             if( !remain ) break;
60         }
61     }
62     return past;
63 }
64 int maxflow() {
65     int flow = 0;
66     while( bfs() ) {
67         memset( cur, 0, sizeof(cur) );
68         flow += dfs(src,oo);
69     }
70     return flow;
71 }
72 int main() {
73     while( scanf( "%d%d", &n, &m )==2 ) {
74         init();
75         src = n+m+1;
76         dst = src+1;
77         for( int i=1,c; i<=n; i++ ) {
78             scanf( "%d", &c );
79             ++idc;
80             adde( idc, dst, c );
81         }
82         for( int i=1,u,v,p; i<=m; i++ ) {
83             scanf( "%d%d%d", &u, &v, &p );
84             ++idc;
85             sump += p;
86             adde( src, idc, p );
87             adde( idc, u, oo );
88             adde( idc, v, oo );
89         }
90         printf( "%d\n", sump-maxflow() );
91     }
92 }

时间: 2024-09-15 15:51:43

hdu 3879 方案选择的相关文章

hdu 3879 hdu 3917 构造最大权闭合图 俩经典题

hdu3879  base station : 各一个无向图,点的权是负的,边的权是正的.自己建一个子图,使得获利最大. 一看,就感觉按最大密度子图的构想:选了边那么连接的俩端点必需选,于是就以边做点,轻轻松松构造了最大权闭合图.简单题.分分钟搞定. hdu3917 :road  constructions :这题题目看了半天没理解...感觉描述的不好...一个有向图,每条路有响应公司承保,若选了该公司,那么该公司的路必需全部选,还有,该公司的承保的路的下面的一条路对应公司也要选,求最大获利.构

HDU 3879 Base Station(最小割---最大权闭合)

题目地址:HDU 3879 无语...对这题的数据范围无语..刚上来一看,建图思路很快出来了,但是一看数据范围..需要5w个点..于是我以为需要缩点或是别的优化..于是又想了会怎么优化,感觉没法优化了..于是上网一搜..还真都是就这么过了...过了..过了..于是,我就按刚上来那个思路敲,结果203ms过了...我真怀疑出题者是不是不小心把数据范围多写了几个0.这要放在比赛中..肯定不敢这么写... 建图思路是,对所有任务额外建一个点,并连源点,权值为任务的获利.然后将每个任务所对应的站点连边,

Redis高可用详解:持久化技术及方案选择

Redis高可用详解:持久化技术及方案选择 Java架构师那些事 关注 0.3 2018.08.23 22:55 字数 9774 阅读 542评论 0喜欢 9 前言 本文将先说明上述几种技术分别解决了Redis高可用的什么问题,然后详细介绍Redis的持久化技术,主要是RDB和AOF两种持久化方案.在介绍RDB和AOF方案时,不仅介绍其作用及操作方法,同时还会介绍持久化实现的一些原理细节及需要注意的问题.最后,介绍在实际使用中持久化方案的选择以及经常遇到的问题等内容. 一.Redis高可用概述

HDU 3879:Base Station(最大权闭合图)

http://acm.hdu.edu.cn/showproblem.php?pid=3879 http://www.lydsy.com/JudgeOnline/problem.php?id=1497 题意:给出n个点m条边,其中每个点有一个权值代表修建这个点需要耗费的钱,然后m条边里面,代表如果两个修建好的点相连的话,那么可以得到一点利润.求最大的获利. 思路:和BZOJ 1497是同一道题目.学习最大权闭合图的题目,看了一下不清楚应该怎么建图,然后只好搜一个论文来看看.http://wenku

Mysql 分区 分表相关总结之方案选择

[TOC] 引述 前段时间项目需要,一直在研究mysql sharding,看了一些这方面的资料,也亲自实验测试了一些数据.在此,做个概括的笔记,方便以后回顾知识,其实大多是借鉴网络上各位前辈的,然后抱着学习态度去实践,积累属于自己的东西. 拆分策略选择 其实拆分很灵活,有的是垂直切分,将一个库拆成两个或多个,将有相关联的表放在一个库里.有的是水平切分将数据量大的表按照一定逻辑进行拆分.个人感觉垂直切分的相对来说缓解了IO的瓶颈,而水平切分,目的是减轻了单个表或某些表读写的压力. 我们项目根据个

Cocos2dx手游开发(方案选择)

接下来的博文,我会把我们开发过程中遇到的问题,设计的系统,一个一个的抛开.来供大家批评建议. 技术选择: 项目:2D项目,类DOTA传奇,需要卡牌,小人,动作,技能ARPG角色扮演类 引擎: coco2dx2.3 动作: spine  在引擎层兼容spine的开发库 UI: cocosStdio 的GUI编辑器,主要用于制作各种界面.除了GUI编辑器意外,其他的编辑器尽量不要用,尤其场景编辑器,用了他,还会生成Action 的CPP文件,这种糟糕的设计,让别人无语了!做不了AI的智能化,就不要做

Android视频播放方案选择——深刻分析android平台的视频播放优缺点

https://zhuanlan.zhihu.com/p/27029577?utm_source=qq&utm_medium=social Android我还可以相信你多少系列文章二之音视频播放 音频视频播放在现在的应用里面很常见,传统应用发展到一定阶段多少会引入音视频资源,特别是现在短视频被看作下一个增长爆发点,和之相关的创业层出不穷,作为开发者如何进行音视频技术选型非常关键 MediaPlayer和VideoView给我们提供了非常方便的播放音视频的能力,几乎不需要要写几行代码就可以完成.

Kafka消息的可靠性测试--针对直播业务的方案选择

转自:http://blog.csdn.net/bailove/article/details/44240303 业务场景 来疯直播互动平台,每天有数百万人上下线,有数十万人同时参与互动直播聊天.用户的登陆.退出及用户间的各种交互行为如聊天.送礼.关注.投票.抢沙发等等事件都会产生大量的消息.这些消息具有瞬间爆发性,比如热门直播间刚开播,直播表演的高潮等等.而用户的礼物.星星.喇叭.沙发等这类消息是不允许丢失,必须100%送达.这就需要有一个高性能,高可靠,稳定可拓展的消息服务平台的支撑.它要求

构建iOS稳定应用架构时方案选择的思考,主要涉及工程结构,数据流思想和代码规范

工程结构架构,减少耦合混乱以及防治需求大改造成结构重构 我打算采用Information flow的方式自上而下,两大层分为基础层和展现层的结构.基础层分为多层,展现层也可分为多层.主要思想是将基础层的最下一层当做零部件,将业务层最下 层当做组装大部件,通过流程串起来形成一个完整的产品,做零件时按照做出一个就扔进对应基础层的篮子里思路来,目录结构也可以按照这种来进行.这两大层的 最下层按照零件拆得越小越容易应对需求变化越容易保护巩固上层的思路来就好.拿微信这个大家都熟悉的产品的几个功能来简单示例