几乎与2853相同,Successive Shortest Path Algorithm(SSPA) 解费用流。

 /* 3315 */
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 const int INF = 0x1f1f1f1f;
const int maxn = ;
const int maxv = maxn*;
const int maxe = maxv * maxv * ;
int V[maxe], F[maxe], W[maxe], nxt[maxe];
int head[maxv], pre[maxv], ID[maxv], dis[maxv], cnt[maxv];
bool visit[maxv];
int Hi[maxn], Pi[maxn], Ai[maxn], Bi[maxn], Vi[maxn];
int s, t, m; bool win(int i, int j) {
int c1 = (Pi[j] + Ai[i] - ) / Ai[i];
int c2 = (Hi[i] + Bi[j] - ) / Bi[j]; return c1 <= c2;
} void addEdge(int u, int v, int c, int w) {
V[m] = v;
F[m] = c;
W[m] = w;
nxt[m] = head[u];
head[u] = m++; V[m] = u;
F[m] = ;
W[m] = -w;
nxt[m] = head[v];
head[v] = m++;
} void Bellman_Ford(int st, int ed) {
int u, v, k;
queue<int> Q; memset(dis, INF, sizeof(dis));
memset(cnt, , sizeof(cnt));
memset(pre, -, sizeof(pre));
dis[st] = ;
cnt[st] = ;
Q.push(st); while (!Q.empty()) {
u = Q.front();
Q.pop();
cnt[u] = -cnt[u];
for (k=head[u]; k!=-; k=nxt[k]) {
v = V[k];
if (F[k] && dis[v]>dis[u]+W[k]) {
dis[v] = dis[u] + W[k];
ID[v] = k;
pre[v] = u;
if (cnt[v] <= ) {
cnt[v] = -cnt[v] + ;
Q.push(v);
}
}
}
}
} bool bfs(int st, int ed) {
Bellman_Ford(st, ed);
priority_queue<pii, vector<pii>, greater<pii> > Q;
int u, v, k; Q.push(make_pair(, st));
while (!Q.empty()) {
pii p = Q.top();
Q.pop();
u = p.second;
if (dis[p.second] > p.first) continue;
if (u == ed) break;
for (k=head[u]; k!=-; k=nxt[k]) {
v = V[k];
if (F[k] && dis[v]>dis[u]+W[k]) {
dis[v] = dis[u] + W[k];
ID[v] = k;
pre[v] = u;
Q.push(make_pair(dis[v], v));
}
}
} return pre[ed] == -;
} int MCMF(int s, int t) {
int ret = , tmp;
int u, v, k; while () {
if (bfs(s, t))
break; tmp = INF;
for (v=t, u=pre[v]; v!=s; v=u, u=pre[v]) {
k = ID[v];
tmp = min(F[k], tmp);
} for (v=t, u=pre[v]; v!=s; v=u, u=pre[v]) {
k = ID[v];
F[k] -= tmp;
F[k^] += tmp;
} ret += dis[t] * tmp;
} return ret;
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int n;
int ans, tmp; while (scanf("%d", &n)!=EOF && n) {
rep(i, , n+)
scanf("%d", &Vi[i]);
rep(i, , n+)
scanf("%d", &Hi[i]);
rep(i, , n+)
scanf("%d", &Pi[i]);
rep(i, , n+)
scanf("%d", &Ai[i]);
rep(i, , n+)
scanf("%d", &Bi[i]); s = m = ;
t = n + n + ;
memset(head, -, sizeof(head)); rep(i, , n+) {
rep(j, , n+) {
if (win(i, j)) {
if (i == j) {
tmp = Vi[i] * + ;
} else {
tmp = Vi[i] * ;
}
} else {
if (i == j) {
tmp = -Vi[i] * + ;
} else {
tmp = -Vi[i] * ;
}
}
addEdge(i, n+j, , -tmp);
}
} rep(i, , n+) {
addEdge(s, i, , );
addEdge(n+i, t, , );
} ans = -MCMF(s, t);
if (ans < ) {
puts("Oh, I lose my dear seaco!");
} else {
printf("%d %.03f%%\n", ans/, ans%*100.0/n);
}
} #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}

【HDOJ】3315 My Brute的更多相关文章

  1. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  2. 【HDOJ】【3506】Monkey Party

    DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...

  3. 【HDOJ】【3516】Tree Construction

    DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...

  4. 【HDOJ】【3480】Division

    DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ...

  5. 【HDOJ】【2829】Lawrence

    DP/四边形不等式 做过POJ 1739 邮局那道题后就很容易写出动规方程: dp[i][j]=min{dp[i-1][k]+w[k+1][j]}(表示前 j 个点分成 i 块的最小代价) $w(l, ...

  6. 【HDOJ】【3415】Max Sum of Max-K-sub-sequence

    DP/单调队列优化 呃……环形链求最大k子段和. 首先拆环为链求前缀和…… 然后单调队列吧<_<,裸题没啥好说的…… WA:为毛手写队列就会挂,必须用STL的deque?(写挂自己弱……s ...

  7. 【HDOJ】【3530】Subsequence

    DP/单调队列优化 题解:http://www.cnblogs.com/yymore/archive/2011/06/22/2087553.html 引用: 首先我们要明确几件事情 1.假设我们现在知 ...

  8. 【HDOJ】【3068】最长回文

    Manacher算法 Manacher模板题…… //HDOJ 3068 #include<cstdio> #include<cstring> #include<cstd ...

  9. 【HDOJ】【1512】Monkey King

    数据结构/可并堆 啊……换换脑子就看了看数据结构……看了一下左偏树和斜堆,鉴于左偏树不像斜堆可能退化就写了个左偏树. 左偏树介绍:http://www.cnblogs.com/crazyac/arti ...

随机推荐

  1. [转] c# 数据类型占用的字节数

    http://www.cnblogs.com/laozuan/archive/2012/04/24/2467888.html

  2. Java NIO 选择器(Selector)的内部实现(poll epoll)

    http://blog.csdn.net/hsuxu/article/details/9876983 之前强调这么多关于linux内核的poll及epoll,无非是想让大家先有个认识: Java NI ...

  3. ArcGIS Runtime SDK for WPF已不更新,后续将被ArcGIS Runtime SDK for .NET取代

    ArcGIS Runtime SDK 10.2.5 for WPF is now available! by mbranscomb and Rex Hansen on January 27, 2015 ...

  4. 学习笔记_JDBC_1_Demo1_连接数据库的基本操作和步骤

    常见错误:连数据库时,这句话String url = "jdbc:mysql://localhost/数据库名";数据库名可能和你建的数据库名不一样 1.安装Mysql,记住此时你 ...

  5. c#中的重写方法与隐藏方

    1.父类中有方法a,添加virtua修饰符可声明为虚方法,在子类中可以用override声明后重写方法a. 2.父类中有方法a,在子类中可以有new修饰符声明后隐藏父类方法. 子类重写方法后,对于子类 ...

  6. 鼠标操作[OpenCV 笔记10]

    ) winname 窗口名字 onMouse 指定窗口每次鼠标事件发生的时候,被调用的函数指针.函数的原型应为void Foo(int event, int x, int y, int flags, ...

  7. 【实习记】2014-08-29算法学习Boyer-Moore和最长公共子串(LCS)

        昨天的问题方案一:寻找hash函数,可行性极低.方案二:载入内存,维护成一个守护进程的服务.难度比较大.方案三:使用前5位来索引,由前3位增至前5位唯一性,理论上是分拆记录扩大100倍,但可以 ...

  8. 安装hadoop多节点 各种整理

    ubuntu烧制usb启动盘链接: 点击打开链接https://help.ubuntu.com/community/Installation/FromUSBStick ubuntu磁盘分区: 点击打开 ...

  9. 【搭建开发环境】在 Windows XP 中参与开源项目,搭建 git 和 cygwin 开发环境

    引言 只有一台 Windows XP 家用机,却想在诸如 Git@OSC 之类的开源社区参与开发,本文提供一个入门级的开发环境搭建指引. 涉及工具:Eclipse,EGit,Cygwin. 欢迎来到 ...

  10. CSS禁止Chrome谷歌浏览器激活输入框后自动添加橘黄色边框

    Chrome默认会为所有的输入框加上橘黄色的边框,虽然有时候可以使我们的网站看起来更友好,但对自定义的样式是有影响的.当鼠标点击输入框时,在谷歌chrome浏览器中,光标移到输入框时激活输入框会被加上 ...