【[TJOI2010]电影迷】
一度自闭
这道题一看就是最小割无疑
我们假设源点\(S\)表示看这个电影,汇点\(T\)表示不看这部电影
如果一个电影的价值为正,我们就从源点点连一条容量为\(val\)的边,表示割掉这个边也就是选择另一边也就是不看的代价为\(val\)
如果为负,就向汇点连一条容量为\(-1*val\)的边,表示选择另一边也就是看的代价是\(val\)
我们发现如果和源点相连就表明这个电影看,和汇点相连就表示不看
而\(x,y\)的关系正好是一个看,一个不看时候的
也就是\(x\)还和源点相连,\(y\)还和汇点相连的时候
于是\(x\)向\(y\)连边容量为价值,在\(x\)看\(y\)不看的时候就必须要割掉这条边
现在一遍最小割就好了
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#define re register
#define LL long long
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define INF 99999999
#define del 10000
inline int read()
{
char c=getchar();
int x=0,r=1;
while(c<'0'||c>'9')
{
if(c=='-') r=-1;
c=getchar();
}
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x*r;
}
struct E
{
int v,nxt,w,f;
}e[500005];
int head[500],cur[500],d[500];
int a[101];
int S,T;
int n,m,num=1;
inline void add_edge(int x,int y,int z)
{
e[++num].v=y;
e[num].nxt=head[x];
head[x]=num;
e[num].w=z;
}
inline void connect(int x,int y,int z){add_edge(x,y,z),add_edge(y,x,0);}
inline int BFS()
{
for(re int i=0;i<=T;i++) cur[i]=head[i],d[i]=0;
std::queue<int> q;
d[S]=1;
q.push(S);
while(!q.empty())
{
int k=q.front();
q.pop();
for(re int i=head[k];i;i=e[i].nxt)
if(!d[e[i].v])
{
if(e[i].w<=e[i].f) continue;
d[e[i].v]=d[k]+1;
q.push(e[i].v);
}
}
return d[T];
}
int dfs(int x,int now)
{
if(x==T||!now) return now;
int flow=0,ff;
for(re int& i=cur[x];i;i=e[i].nxt)
if(d[e[i].v]==d[x]+1)
{
ff=dfs(e[i].v,min(e[i].w-e[i].f,now));
if(!ff) continue;
flow+=ff,now-=ff;
e[i].f+=ff,e[i^1].f-=ff;
if(!now) break;
}
return flow;
}
int main()
{
n=read(),m=read();
int ans=0;
S=0,T=n+1;
for(re int i=1;i<=n;i++) a[i]=read();
for(re int i=1;i<=n;i++)
{
if(a[i]>0) ans+=a[i],connect(S,i,a[i]),connect(i,T,0);
else ans-=a[i],connect(i,T,-1*a[i]),connect(S,i,0);
}
int x,y,val;
for(re int i=1;i<=m;i++)
{
x=read(),y=read(),val=read();
connect(y,x,val);
}
while(BFS()) ans-=dfs(S,INF);
for(re int i=1;i<=n;i++) if(a[i]<0) ans+=a[i];
if(ans<0) puts("-1");
else std::cout<<ans;
return 0;
}
【[TJOI2010]电影迷】的更多相关文章
- 【刷题】洛谷 P3872 [TJOI2010]电影迷
题目描述 小A是一个电影迷,他收集了上百部的电影,打算从中挑出若干部在假期看完.他根据自己的口味和网上的介绍,对每部电影X都打了一个分数vX,表示自己喜欢的程度.这个分数的范围在-1000至1000之 ...
- python2.7高级编程 笔记二(Python中的描述符)
Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...
- 【python】描述符descriptor
开始看官方文档,各种看不懂,只看到一句Properties, bound and unbound methods, static methods, and class methods are all ...
- Python描述符(descriptor)解密(转)
原文:http://www.geekfan.net/7862/ Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装 ...
- Python-描述符
Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些“中级”的语 ...
- Sublime Text主题下载、安装与配置
从下面地址下载主题包,以下载第一个为例,解压缩并重命名为Theme – Flatland 备注:下载好的文件中 .sublime-theme后缀的表示界面主题(theme),.tmTheme表示颜色 ...
- 爬虫神器XPath,程序员带你免费获取周星驰等明星热门电影
本教程由"做全栈攻城狮"原创首发,本人大学生一枚平时还需要上课,但尽量每日更新文章教程.一方面把我所习得的知识分享出来,希望能对初学者有所帮助.另一方面总结自己所学,以备以后查看. ...
- 广告狂人第一至七季/全集Mad Men迅雷下载
广告狂人 第一季 Mad Men Season 1 (2007) 本季看点:你是谁?你想要什么?你爱乾什么?这些都不重要,重要的是你怎么把东西卖出去.凡是了解纽约的人都知道,今天,在麦迪逊大道(Mad ...
- Python描写叙述符(descriptor)解密
Python中包括了很多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...
随机推荐
- php访问mysql数据库的步骤
官方说5.5开始就废弃mysql_query()这块东西很多,当然常用的就几个还是看手册吧. 这里简单记录一下.在我失忆之后可以找回一点记忆.最近一直用框架原生的都快忘了. 1.打开mysql连接 $ ...
- 利用三层判断sql数据库中编码是否已经存在(个人拙作,不喜勿喷)
本人.Net新手,初学三层便想记录写笔记,以供像自己一样的新人去学习,大神就不用看啦 Dal层: /// 判断编码是否存在 /// </summary> /// <param nam ...
- 【13】MD5编码、Zlib压缩解压缩
1.MD5加密 /// <summary> /// 使用MD5加密算法 /// </summary> /// <param name="md5MessageSt ...
- Fask中的路由-模版-静态文件引用 及宏定义与表单
文档: flask: http://docs.jinkan.org/docs/flask/quickstart.html#redirects-and-errors jinja2 http://docs ...
- 关于react-router-dom的一些记录
最近在做的新项目使用的技术栈是 React+AntDesign,本篇主要记录在实践过程中使用react-router-dom时遇到的一些方法的总结. 1.HashRouter和BrowserRoute ...
- Linux命令行bash批量重命名文件
本文介绍下,在linux下使用shell批量重命名文件的例子,有需要的朋友参考下吧. 在linux中,重命名文件名,需要用到mv命令.如果需要批量重命名名一批文件,就需要写bash脚本或命令行了. 例 ...
- Python with VS Code
1. 基本的代码结构为: 2.
- 路飞学城知识点3缓存知识点之二redis
redis:支持的字符类型多,可以做持久化 memchache:只能存储到内存中,不能做持久化,仅支持字符串类型. 参考博客 redis安装服务端: github安装包 安装客户端: pip inst ...
- Azure 虚拟机如何配置 AntiMalware
本文仅演示通过 PowerShell 方式安装并配置 AntiMalware 的过程. 经典虚拟机 立即访问http://market.azure.cn 加载 Antimalware ...
- 【Oracle】Update方法
1.单表更新 update customers set city_name='山西省太原市' where city_name='山西太原' 2.两表(多表)关联update -- 被修改值由另一个表运 ...