几乎与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. netMVC 搭建Ucenter 同步登陆退出discuz

    先看一下效果

  2. SQL server 2012 如何取上个月的最后一天

    好吧 QQ群里被问到这种问题,还是这里写一下吧. DECLARE @date DATETIME = getdate(); SELECT EOMONTH (@date) AS 'Last Day Of ...

  3. ISA2006 下建立VPN连接时出现“错误800”时的解决办法

    [转载]http://social.microsoft.com/Forums/zh-CN/9cfa0c06-0f46-44cb-9e8f-8eba1c3821ba/vpn-vpn800 重启Routi ...

  4. form 表单 action 参数 接收不了

    <form method="get" action="/test/index.php?mod=123456" > <input type=&q ...

  5. 10.20_wiki

    XWiki:官网.Documentation.User's GuideProgrammer's GuideAdministrator's Guide Developer's Guide (1) htt ...

  6. OpenJudge 1806:词典find()与end()

    1806:词典 总时间限制:  3000ms  内存限制:  65536kB 描述 你旅游到了一个国外的城市.那里的人们说的外国语言你不能理解.不过幸运的是,你有一本词典可以帮助你. 输入 首先输入一 ...

  7. gcc命令以及makefile文件

    (一)makefile里涉及到的gcc命令 gcc -I./inc:指定头文件寻找目录 将按照 ./inc --> /usr/include --> /usr/local/include的 ...

  8. 在远程服务器上完成本地设备的程序烧写和调试(基于vivado ,SDK软件)

    在使用vivado和SDK进行设计开发的时候,通常需要登录到远程服务器上进行,但是会遇到一个问题就是,所使用的开发板通常是连接在自己的电脑上(local-PC),那要怎么才能让运行在服务器上的设计软件 ...

  9. Sql server 浅谈用户定义表类型

    1.1 简介 SQL Server 中,用户定义表类型是指用户所定义的表示表结构定义的类型.您可以使用用户定义表类型为存储过程或函数声明表值参数,或者声明您要在批处理中或在存储过程或函数的主体中使用的 ...

  10. apache虚拟主机安装注意事项

    apache虚拟主机在添加的时候,总是会有一些莫名其妙的问题,后来发现可以使用一个参数去验证的: xxxxx/httpd -S //这个参数会去检查虚拟主机配置的正确性,很好用 因为有时候可能就是缩进 ...