[SCOI2014]方伯伯运椰子

2024-01-01 23:10
文章标签 伯伯 椰子 scoi2014

本文主要是介绍[SCOI2014]方伯伯运椰子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

嘟嘟嘟

 

01分数规划思维题。

题中要求交通总量不减少,那么如果总量增加的话,总费用就会增加,所以一定不是更优的解。那么总量守恒。

这是不是就想到了网络流?对于每一个节点流入量等于流出量。然后就是很有思维的一个转化了:把压缩看成退流,把扩容看成增广。

边(x, y)一次压缩,就建一条y -> x,容量为a - d的边。

边(x, y)一次增广,就建一条x -> y,容量为b + d的边。也就是一次调整多出来的费用。那么这样建完图后,图中的一个环就代表一种调整方案!

回头看题,让求某一个比值最小,那一定会想到01分数规划,令ans = max((X - Y) / k),那么ans >= (X - Y) / k,于是有ans * k + Y - X >= 0。按上述的建图,Y - X就是环上的边权和,k就是环中的点数(边数),所以这个式子相当于每经过一条边,这条边的边权就加一个ans,那么ans * k + Y - X >= 0就可以写成Σ(ans + ei) >= 0。二分的时候,如果存在负环,说明mid取小了,向右二分;否则向左二分。

 

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<cctype>
 8 #include<vector>
 9 #include<stack>
10 #include<queue>
11 using namespace std;
12 #define enter puts("") 
13 #define space putchar(' ')
14 #define Mem(a, x) memset(a, x, sizeof(a))
15 #define rg register
16 typedef long long ll;
17 typedef double db;
18 const int INF = 0x3f3f3f3f;
19 const db eps = 1e-8;
20 const int maxn = 5e3 + 5;
21 const int maxe = 3e3 + 5;
22 inline ll read()
23 {
24   ll ans = 0;
25   char ch = getchar(), last = ' ';
26   while(!isdigit(ch)) {last = ch; ch = getchar();}
27   while(isdigit(ch)) {ans = ans * 10 + ch - '0'; ch = getchar();}
28   if(last == '-') ans = -ans;
29   return ans;
30 }
31 inline void write(ll x)
32 {
33   if(x < 0) x = -x, putchar('-');
34   if(x >= 10) write(x / 10);
35   putchar(x % 10 + '0');
36 }
37 
38 int n, m;
39 struct Edge
40 {
41   int nxt, to, w;
42 }e[maxe << 1];
43 int head[maxn], ecnt = -1;
44 void addEdge(int x, int y, int w)
45 {
46   e[++ecnt] = (Edge){head[x], y, w};
47   head[x] = ecnt;
48 }
49 
50 db dis[maxn];
51 bool vis[maxn], mak[maxn];
52 bool spfa(int now, db x)
53 {
54   vis[now] = mak[now] = 1;
55   for(int i = head[now]; i != -1; i = e[i].nxt)
56     {
57       if(dis[e[i].to] > dis[now] + e[i].w + x)
58     {
59       dis[e[i].to] = dis[now] + e[i].w + x;
60       if(vis[e[i].to]) return 1;
61       if(spfa(e[i].to, x)) return 1;
62     }
63     }
64   vis[now] = 0;
65   return 0;
66 }
67 
68 bool judge(db x)
69 {
70   Mem(vis, 0); Mem(mak, 0);
71   for(int i = 1; i <= n + 2; ++i)
72     if(!mak[i])
73       {
74     if(spfa(i, x)) return 1;
75       }
76   return 0;
77 }
78 
79 int main()
80 {
81   Mem(head, -1);
82   n = read(); m = read();
83   for(int i = 1; i <= m; ++i)
84     {
85       int x = read(), y = read(), a = read(), b = read(), c = read(), d = read();
86       if(c) addEdge(y, x, a - d);
87       addEdge(x, y, b + d);
88     }
89   db L = 0, R = 1e5;
90   while(R - L > eps)
91     {
92       db mid = (L + R) / 2.00;
93       if(judge(mid)) L = mid;
94       else R = mid;
95     }
96   printf("%.2lf\n", L);
97   return 0;
98 }
View Code

 

转载于:https://www.cnblogs.com/mrclr/p/9856943.html

这篇关于[SCOI2014]方伯伯运椰子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_30784945/article/details/98799131
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/560754

相关文章

BZOJ 3594 [Scoi2014]方伯伯的玉米田 动态规划+二维树状数组

Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。 这排玉米一共有N株,它们的高度参差不齐。 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。 方伯伯可以选择一个区间,把这个区间的玉米全部拔高1单位高度,他可以进行最多K次这样的操作。拔玉米则可以随意选择一个集合的玉米拔掉。 问能

BZOJ3594[Scoi2014] 方伯伯的玉米田 解题报告【二维树状数组优化DP】

Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。 这排玉米一共有N株,它们的高度参差不齐。 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。 方伯伯可以选择一个区间,把这个区间的玉米全部拔高1单位高度,他可以进行最多K次这样的操作。拔玉米则可以随意选择一个集合的玉米拔掉。

[macOS游戏]蒂伯伯恩

原文来源于黑果魏叔官网,转载需注明出处。 人类摧毁了地球并消失了。但一些动物已经适应和进化。选择海狸社区之一,帮助殖民地生存! 管理两个海狸社区之一:勤奋的铁牙或尊重自然的世界尾巴。这两个社区都以其独特的风格、建筑和游戏玩法而闻名。选择你喜欢的! 为永久干旱做准备。储备食物,照顾田野和森林,即使河流已经干涸。使用天然水源和人工灌溉来保持地球肥沃。 未来的海狸们已经研究水利工程几千年了。建造水坝,

P3285 [SCOI2014]方伯伯的OJ [线段树+动态开点]

传送门 跟NOIP2017有点像 由于n<=10^8 , 我们不能记录每个数的位置, 于是我们可以开一棵权值线段树, 记录序列中取走的位置 同时, 还要维护前后两头... 很明显也要用一种数据结构, 我们先来看看要干什么   操作1: 将x的编号变成y, 并输出x的排名 对于第一个, 我们可以开两个map, 一个记录y原来是x变来的, x现在已经变成y了 对于第二个, 我们讨论一下x

【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 代码 对于选择区间[l,r],如果同时把[r+1,n]也选进去,因为是最长不下降子序列,所以让后面更高满足需求,所以我们把[r+1,n]也选进去,所以每次选择区间都是[i,n]

71 买卖椰子水

暴力贪心,注意找15块时优先选择10+5,其次是5+5+5 #include <iostream>using namespace::std;using std::cout;using std::cin;int main(){int n;cin >> n;int bills[n+1];for(int i=1; i<=n; i++){cin >> bills[i];}int c5=0, c

C语言分椰子

感悟:这个程序编了2天,一些小卡壳就停滞不前。这次主要是在第26-28行,一直想要通过一个循环来控制条件,结束穷举循环,这样想了好久都没有结果。后面发现可以通过二次赋值,来控制循环,如图28—32行。完美解决了上述问题。

C练习——N个水手分椰子

题目: 五个水手在岛上发现一堆椰子,先由第1个水手把椰子分为等量的5堆,还剩下1个给了猴子,自己藏起1堆。然后,第2个水手把剩下的4堆混合后重新分为等量的5堆,还剩下1个给了猴子,自己藏起1堆。以后第3、4个水手依次按此方法处理。最后,第5个水手把剩下的椰子分为等量的5堆后,同样剩下1个给了猴子。请用迭代法编程计算并输出原来这堆椰子至少有多少个。N个水手每次分成N组加一呢? 解析: 假如某水

[BZOJ3594] [Scoi2014]方伯伯的玉米田

[BZOJ3594] [Scoi2014]方伯伯的玉米田 题目大意 给定长度为 n n的一个序列,可以找出kk个区间使这 k k个区间的元素同时+1+1,询问最后最长不下降子序列的大小 n≤104,k≤500,ai≤5000 n\le10^4,k\le 500,a_i\le5000 题解 一个结论:找出的区间的右端点一定是 n n dp[i,j]=max{dp[k,l]}+1

方伯伯的OJ ( onlinejudge )

方伯伯的OJ ( onlinejudge ) 方伯伯的OJ 题目描述 方伯伯正在做他的OJ。现在他在处理OJ 上的用户排名问题。 OJ 上注册了n 个用户,编号为1 ∼ n,一开始他们按照编号排名。方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和编号: 1. 操作格式为1 x y,意味着将编号为x 的用户编号改为y,而排名不变,执行完该操作后需要输出该用户在队列中的位