【bzoj1449】【JSOI2009】【球队收益】【费用流】
发布日期:2021-11-16 15:38:47
浏览次数:8
分类:技术文章
本文共 1970 字,大约阅读时间需要 6 分钟。
Description
Input
Output
一个整数表示联盟里所有球队收益之和的最小值。
Sample Input
3 3
1 0 2 1
1 1 10 1
0 1 3 3
1 2
2 3
3 1
1 0 2 1
1 1 10 1
0 1 3 3
1 2
2 3
3 1
Sample Output
43
HINT
题解:
直接算支出不好计算。
可以先假设所有队伍一开始都输了.
考虑每个队伍赢一场会增加多少支出.
c*(x+1)^2-d*(y-1)^2-c*x^2-d*y^2=2*c*x-2*d*y+c+d;
所以我们可以从源点向每场比赛连容量为1费用为0的边。
每场比赛向这场比赛的两支队伍连容量为1费用为0的边。
然后统计一下每支队伍参加的比赛数。
每支队伍向汇点连这支队伍的比赛数条边.
容量都为1.费用依次为当前状态再多赢1场增加的支出.
初始答案加上最小费用流即可。
代码:
#include#include #include #define N 7000#define M 200000#define inf 2100000000using namespace std;int point[N],next[M<<1],T,n,m,cnt(1),win[N],los[N];int dis[N],pre[N],f[N],q[N*100],ans,c[N],d[N],x,y,p[N];struct use{int st,en,v,c;}e[M<<1];void add(int x,int y,int v,int c){ next[++cnt]=point[x];point[x]=cnt; e[cnt].st=x;e[cnt].en=y;e[cnt].v=v;e[cnt].c=c; next[++cnt]=point[y];point[y]=cnt; e[cnt].st=y;e[cnt].en=x;e[cnt].v=0;e[cnt].c=-c;}bool spfa(){ for (int i=1;i<=T;i++) dis[i]=inf; memset(f,0,sizeof(f)); int h(0),t(1);q[t]=1;f[1]=1;dis[1]=0; while (h dis[u]+e[i].c)){ dis[e[i].en]=dis[u]+e[i].c; pre[e[i].en]=i; if (!f[e[i].en]){ f[e[i].en]=1; q[++t]=e[i].en; } } } return dis[T]!=inf; }void aug(){ int mn=inf; for (int i=T;i!=1;i=e[pre[i]].st) mn=min(mn,e[pre[i]].v); for (int i=T;i!=1;i=e[pre[i]].st){ e[pre[i]].v-=mn;e[pre[i]^1].v+=mn;ans+=mn*e[pre[i]].c; } }int main(){ //freopen("a.in","r",stdin); // freopen("b.out","w",stdout); scanf("%d%d",&n,&m);T=n+m+2; for (int i=1;i<=m;i++) add(1,i+1,1,0); for (int i=1;i<=n;i++) scanf("%d%d%d%d",&win[i],&los[i],&c[i],&d[i]); for (int i=1;i<=m;i++){ scanf("%d%d",&x,&y); add(i+1,x+m+1,1,0); add(i+1,y+m+1,1,0); p[x]++;p[y]++; } for (int i=1;i<=n;i++) los[i]+=p[i]; for (int i=1;i<=n;i++) ans+=c[i]*win[i]*win[i]+d[i]*los[i]*los[i]; for (int i=1;i<=n;i++) for (int j=1;j<=p[i];j++){ add(i+m+1,T,1,2*c[i]*win[i]-2*d[i]*los[i]+c[i]+d[i]); win[i]++;los[i]--; } while (spfa()) aug(); cout< <
转载地址:https://blog.csdn.net/sunshinezff/article/details/51131649 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月11日 02时42分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
屏蔽电脑广告等弹窗
2019-04-26
WARNING: The scripts f2py, f2py3 and f2py3.9 are installed in ‘/home/ubuntu/.local/bin‘ which is no
2019-04-26
linux服务器上运行python文件
2019-04-26
ubuntu配置清华源
2019-04-26
ubuntu安装python3.8
2019-04-26
linux配置chrome和chromedriver
2019-04-26
机器人定时执行参考
2019-04-26
python2自动转换为python3
2019-04-26
完整官网asyncio协程学习
2019-04-26
tensorflow环境准备
2019-04-26
linux装conda
2019-04-26
github上传文件说this file is hidden
2019-04-26
历经一个月研究,发布两款机器人,小白就会python自己制作机器人了
2019-04-26
线性表查找第i个元素
2019-04-26
线性表从第i个元素插入
2019-04-26
free函数使用理解
2019-04-26
malloc函数使用理解
2019-04-26
线性表删除第i个元素
2019-04-26
指针定义和理解
2019-04-26