博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1449————2016——3——14
阅读量:5280 次
发布时间:2019-06-14

本文共 1390 字,大约阅读时间需要 4 分钟。

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1449

题目简述:

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

Sample Output

43
题解:
设x为win,y为lose;
先让所有人后面比赛都会输,计算出一个preans,那么怎么处理会赢的请况呢?
很简单,就让一个人的win+1,lose-1,那么相对于之前就可以获得(c*(x+1)^2+d*(y-1)^2-c*x^2-d*y^2=2*c[i]*win[i]+c[i]+d[i]-2*d[i]*lose[i])
所以就在建一条这样的边就好了,推荐使用 zkw(速度快,代码短);
1 #include
2 #include
3 #include
4 #define inf 0x7fffffff 5 #define maxn 1000000 6 int pre[maxn],v[maxn],cost[maxn],cap[maxn],lis[maxn]; 7 int lose[6010],win[6010],in[6010],c[6010],d[6010],dis[6010],now[6010],sla[6010],mark[6010]; 8 bool vis[6010]; 9 int n,m,s,t,tot,ans; 10 using namespace std; 11 void ins(int a, int b, int c, int d) 12 { 13 tot++; pre[tot]=now[a]; now[a]=tot; v[tot]=b; cost[tot]=d; cap[tot]=c; 14 } 15 void insert(int a, int b, int c, int d) 16 { 17 ins(a,b,c,d); ins(b,a,0,-d); 18 } 19 bool spfa() 20 { 21 int head=0,tail=1; 22 for (int i=s; i<=t; i++) dis[i]=inf; 23 memset(mark,0,sizeof(mark)); 24 lis[0]=t; dis[t]=0; mark[t]=1; 25 while (head!=tail) 26 { 27 int x=lis[head]; mark[x]=0; head++; 28 if(head==6005)head=0; 29 for (int i=now[x]; i; i=pre[i]) 30 { 31 if (dis[x]+cost[i^1]

 

 
 
 
 

转载于:https://www.cnblogs.com/HQHQ/p/5276937.html

你可能感兴趣的文章
快速排序
查看>>
java排序算法(五):快速排序
查看>>
阻止事件的默认行为,例如click <a>后的跳转~
查看>>
[BJOI2018]求和
查看>>
Activity的生命周期以及启动方式
查看>>
HackerRank "Triangle Numbers"
查看>>
iphone/iOS 访问本地数据库sqlite3
查看>>
关于 ie9 不执行 js 的问题
查看>>
sql 语句之 case
查看>>
二分图行列匹配与最大匹配必须边
查看>>
[设计模式]-对象的封装
查看>>
wpf首次项目开发总结之音频
查看>>
ODBC连接数据库实例
查看>>
HTTP协议中的COOKIE机制简单理解
查看>>
寻找最大值
查看>>
算法提高 日期计算
查看>>
jmeter的web接口测试
查看>>
开发框架模块视频系列(2)-Winform分页控件介绍
查看>>
前端之Java Script(3)
查看>>
函数式编程语言
查看>>