hdu5988 Coding Contest
首先这是个费用流,用log转乘法为加法,外加模板的修改,需加eps
下面是废话,最好别看
闲来无事(鼓起勇气)写这篇博客
这是个自带影像回访的题目
青岛的炼铜之旅,大学的acm生涯就这样结束了。或许还会刷刷题目,但是也再也没有证明自己的机会和心气。
回想大学的这段旅程。
大一下接触acm,为进集训队拼命刷题,因为基础差在暑假的集训后没有能够去区域赛。郁闷的大二上加寒假没有刷题。大二下因为特别的机会得以和老队友参加省赛,差一名得金。从大二下开始每天从早上到晚上刷题。本以为可以报大腿在之后获得银牌甚至金牌。但是暑假被分到其他队。大三上拼命刷,最后得到两铜也算是我的预期(预期要打铁的)。
过去感觉的自己跟小伙伴有那么多差距,本以为可以赶上他们。似乎以前他们说的一些解法我都听不懂,现在我可以听懂,甚至提出自己的解法。
但是,
但是只是靠近,永远无法追上他们了。
acm也算从小的一个梦想,小时候没有机缘参加信息学竞赛,羡慕并且好奇。这个隐藏的梦想因为acm的相遇而被实现。
我也不能说这段经历有点悲伤吧。我确实不够努力。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define begin Begin
#define end End
#define next nxt
const int N = 108, M = 50000;
const int INF = 1e9;
const double eps = 1e-7;
int q[1000000];
struct Node{
int u, v, cap;
double cost;
int next;
}edge[M];//有向图,u到v的容量,费用
int tot;
int head[N], pre[N], path[N];
double dis[N];
bool inq[N];
void init(){
tot = 0;
memset(head, -1, sizeof(head));
}
void addedge(int u, int v, int cap, double cost){
edge[tot].u = u;
edge[tot].v = v;
edge[tot].cap = cap;
edge[tot].cost = cost;
edge[tot].next = head[u];
head[u] = tot++;
edge[tot].u = v;
edge[tot].v = u;
edge[tot].cap = 0;
edge[tot].cost = -cost;
edge[tot].next = head[v];
head[v] = tot++;
}
bool SPFA(int st, int des){
memset(inq, 0, sizeof(inq));
fill(dis, dis + des + 2, INF);
memset(pre, -1, sizeof(pre));
int front = 0, rear = 0;
q[rear++] = st;
dis[st] = 0;
inq[st] = true;
while(front < rear){
int u = q[front++];
inq[u] = false;
for(int i = head[u]; ~i; i = edge[i].next){
int v = edge[i].v;
if(edge[i].cap > 0 && dis[v] > dis[u] + edge[i].cost + eps){
dis[v] = dis[u] + edge[i].cost;
pre[v] = u;
path[v] = i;
if(!inq[v]){
inq[v] = true;
q[rear++] = v;
}
}
}
}
return pre[des] != -1;
//return dis[des] + eps < INF;
}
double MCMF(int st, int des){
double mincost = 0, flow = 0;
while(SPFA(st, des)){
int f = INF;
for(int i = des; i != st; i = pre[i]){
if(f > edge[path[i]].cap){
f = edge[path[i]].cap;
}
}
for(int i = des; i != st; i = pre[i]){
edge[path[i]].cap -= f;
edge[path[i]^1].cap += f;
}
mincost += f * dis[des];
flow += f;
}
return mincost;
}
int main(){
int n,m;
int _; scanf("%d",&_);
while(_--) {
init();
scanf("%d %d",&n,&m);
int s = 0; int t = n+1;
for(int i = 1; i <= n; ++i) {
int a,b; scanf("%d %d",&a,&b);
if(a > b) addedge(s,i,a-b,0);
else if(b > a) addedge(i,t,b-a,0);
}
for(int i = 1; i <= m; ++i) {
int a,b,c; double p; scanf("%d %d %d %lf",&a,&b,&c,&p);
if(c > 0)addedge(a,b,1,0);
if(c > 1) addedge(a,b,c-1,-log(1-p) );
}
double tt = MCMF(s, t);
tt = exp(-tt);
printf("%.2f\n", 1-tt);
}
return 0;
}
hdu5988 Coding Contest的更多相关文章
- hdu-5988 Coding Contest(费用流)
题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- HDU5988 Coding Contest(费用流)
2016青岛现场赛的一题,由于第一次走过不会产生影响,需要拆点,不过比赛时没想到,此外还有许多细节要注意,如要加eps,时间卡得较紧要注意细节优化等 #include <iostream> ...
- 【费用流】hdu5988 Coding Contest
从源点向每个点连接容量为该点人数,费用为1的边, 把原图中的每条边拆成两条,一条容量为1,费用为1,另一条容量为ci-1,费用为1-pi 从每个点向汇点连接容量为该点面包数量,费用为1的边. 跑的费用 ...
- HDU5988/nowcoder 207G - Coding Contest - [最小费用最大流]
题目链接:https://www.nowcoder.com/acm/contest/207/G 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5988 ...
- HDU 5988 Coding Contest(最小费用最大流变形)
Problem DescriptionA coding contest will be held in this university, in a huge playground. The whole ...
- HDU 5988.Coding Contest 最小费用最大流
Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- Coding Contest(费用流变形题,double)
Coding Contest http://acm.hdu.edu.cn/showproblem.php?pid=5988 Time Limit: 2000/1000 MS (Java/Others) ...
- 2016青岛区域赛.Coding Contest(费用流 + 概率计算转换为加法计算)
Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- HDU 5988 Coding Contest 最小费用流 cost->double
Problem Description A coding contest will be held in this university, in a huge playground. The whol ...
随机推荐
- BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]
题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...
- 帝国CMS备份出现数据恢复不完整的问题
今天linux主机中毒了,把用帝国备份王备份之后,恢复了快照到刚建主机的状态: 哎,只怪当初没有勤快的去做快照啊: 重新配置好后: 开始使用帝国备份王: 数据恢复之后,打开文章,提示"附加表 ...
- 读书共享 Primer Plus C-part 9
第十二章 存储类.链接和内存管理 针对代码块中的static变量做如下范本 #include ...
- 让我们一起摇摆 Turnipbit体感遥控车
相信大家对Microbit是非常熟悉的,而今天我们做的这个小玩具所用的核心板是Turnipbit,是基于 Microbit开发的一块适合儿童适用的板卡.基本使用原理是一样的,这里就不多介绍了,代码这方 ...
- php用正则匹配出图片img标签中的src路径(兼容)
用php抓图片是个常用的需求,下面提供一个比较兼容的正则表达式来实现php抓取出页面.字符串中所有图片的src. 下面是一个范例,能匹配各种标签格式写法的图片,不管src在什么地方,还是单引号.双引号 ...
- nginx的负载均衡集群测试
分别在3台机子安装nginx和启动nginx服务. dir: 192.168.0.7 另外2台服务器为 192.168.0.5 ,192.168.0.6 在dir 192.168.0.7 上增加配置 ...
- c++实现一个小算法
题目:有n个格子,每个格子里有坦克,坦克有两滴血,你向格子里投掷炸弹,每次命中坦克他掉一滴血并随机像左或者右移动一个格子,问最少炸几次能把全部坦克炸完. 题解:先向偶数格子投掷炸弹,所有的坦克全跑到奇 ...
- DAY1--JAVA
学习路线 2017-1-27打卡学习,先学习第一部分Java基础. 面向对象 面向对象---它是从现实世界中客观存在的事物(即对象)出发,并在系统构造中尽可能的运用人类自然的思维方式,来构建软件系统. ...
- Angular @HostBinding()和@HostListener()用法
@HostBinding()和@HostListener()在自定义指令时非常有用.@HostBinding()可以为指令的宿主元素添加类.样式.属性等,而@HostListener()可以监听宿主元 ...
- 1.2 decimal模块
>>> 0.1 + 0.1 +0.1 == 0.3 False >>> >>> print(0.1 + 0.1 + 0.1) 0.30000000 ...