提出 #577755
ソースコード 拡げる
#include<bits/stdc++.h>
using namespace std;
#define FZ(n) memset((n),0,sizeof(n))
#define FMO(n) memset((n),-1,sizeof(n))
#define F first
#define S second
#define PB push_back
#define ALL(x) begin(x),end(x)
#define SZ(x) ((int)(x).size())
#define IOS ios_base::sync_with_stdio(0); cin.tie(0)
template<typename A, typename B>
ostream& operator <<(ostream &s, const pair<A,B> &p) {
return s<<"("<<p.first<<","<<p.second<<")";
}
template<typename T>
ostream& operator <<(ostream &s, const vector<T> &c) {
s<<"[ ";
for (auto it : c) s << it << " ";
s<<"]";
return s;
}
// Let's Fight!
typedef pair<long long, long long> pll;
struct CostFlow {
static const int MXN = 205;
static const long long INF = 102938475610293847LL;
struct Edge {
int v, r;
long long f, c;
};
int n, s, t, prv[MXN], prvL[MXN], inq[MXN];
long long dis[MXN], cost, fl;
vector<Edge> E[MXN];
void init(int _n, int _s, int _t) {
n = _n; s = _s; t = _t;
for (int i=0; i<n; i++) E[i].clear();
cost = fl = 0;
}
void add_edge(int u, int v, int f, int c) {
E[u].PB({v, SZ(E[v]) , f, c});
E[v].PB({u, SZ(E[u])-1, 0, -c});
}
pll flow() {
while (true) {
for (int i=0; i<n; i++) {
dis[i] = INF;
prv[i] = prvL[i] = -1;
inq[i] = 0;
}
dis[s] = 0;
queue<int> que;
que.push(s);
while (!que.empty()) {
int u = que.front(); que.pop();
inq[u] = 0;
for (int i=0; i<SZ(E[u]); i++) {
int v = E[u][i].v;
long long w = E[u][i].c;
if (E[u][i].f > 0 && dis[v] > dis[u] + w) {
prv[v] = u;
prvL[v] = i;
dis[v] = dis[u] + w;
if (!inq[v]) {
inq[v] = 1;
que.push(v);
}
}
}
}
if (dis[t] == INF) break;
long long tf = INF;
int v = t;
while (v != s) {
int u = prv[v], l = prvL[v];
tf = min(tf, E[u][l].f);
v = u;
}
v = t;
while (v != s) {
int u = prv[v], l = prvL[v];
E[u][l].f -= tf;
E[v][E[u][l].r].f += tf;
v = u;
}
cost += tf * dis[t];
fl += tf;
return {fl, cost};
}
return {fl, cost};
}
}flow;
int N, M, S, T;
double P;
int main() {
IOS;
while (cin >> N >> M >> P >> S >> T) {
S--; T--;
flow.init(N, S, T);
for (int i=0, u, v, c, f; i<M; i++) {
cin >> u >> v >> c >> f;
u--; v--;
flow.add_edge(u, v, f, c);
}
long long fl = 0, cost = 0;
double ans = 1E30;
while (true) {
pll r = flow.flow();
if (r.F == fl && r.S == cost) break;
fl = r.F;
cost = r.S;
double val = (P + cost) / (double)fl;
ans = min(ans, val);
}
cout<<fixed<<setprecision(12)<<ans<<endl;
}
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | J - Longest Shortest Path |
| ユーザ | bcw0x1bd2 |
| 言語 | C++11 (GCC 4.8.1) |
| 得点 | 100 |
| コード長 | 2714 Byte |
| 結果 | AC |
| 実行時間 | 84 ms |
| メモリ | 1468 KiB |
ジャッジ結果
| セット名 | All | ||
|---|---|---|---|
| 得点 / 配点 | 100 / 100 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| All | 00_example_00, 00_example_01, 00_example_02, 05_kill_00, 05_kill_01, 05_kill_02, 10_rand_small_000, 10_rand_small_001, 10_rand_small_002, 10_rand_small_003, 10_rand_small_004, 11_rand_medium_000, 11_rand_medium_001, 11_rand_medium_002, 11_rand_medium_003, 11_rand_medium_004, 12_rand_large_000, 12_rand_large_001, 12_rand_large_002, 12_rand_large_003, 12_rand_large_004, 15_rand_small_000, 15_rand_small_001, 15_rand_small_002, 15_rand_small_003, 15_rand_small_004, 20_parallel_small_000, 20_parallel_small_001, 20_parallel_small_002, 20_parallel_small_003, 20_parallel_small_004, 22_parallel_large_000, 22_parallel_large_001, 22_parallel_large_002, 22_parallel_large_003, 22_parallel_large_004, 32_bigDist_large_000, 32_bigDist_large_001, 32_bigDist_large_002, 32_bigDist_large_003, 32_bigDist_large_004, 42_bigCost_large_000, 42_bigCost_large_001, 42_bigCost_large_002, 42_bigCost_large_003, 42_bigCost_large_004, 50_gen_rand_000, 50_gen_rand_001, 50_gen_rand_002, 50_gen_rand_003, 50_gen_rand_004, 52_gen_rand_000, 52_gen_rand_001, 52_gen_rand_002, 52_gen_rand_003, 52_gen_rand_004 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_example_00 | AC | 37 ms | 1140 KiB |
| 00_example_01 | AC | 31 ms | 1140 KiB |
| 00_example_02 | AC | 31 ms | 1204 KiB |
| 05_kill_00 | AC | 32 ms | 1140 KiB |
| 05_kill_01 | AC | 32 ms | 1156 KiB |
| 05_kill_02 | AC | 30 ms | 1196 KiB |
| 10_rand_small_000 | AC | 32 ms | 1164 KiB |
| 10_rand_small_001 | AC | 32 ms | 1196 KiB |
| 10_rand_small_002 | AC | 32 ms | 1160 KiB |
| 10_rand_small_003 | AC | 31 ms | 1160 KiB |
| 10_rand_small_004 | AC | 31 ms | 1256 KiB |
| 11_rand_medium_000 | AC | 30 ms | 1164 KiB |
| 11_rand_medium_001 | AC | 31 ms | 1196 KiB |
| 11_rand_medium_002 | AC | 32 ms | 1164 KiB |
| 11_rand_medium_003 | AC | 31 ms | 1144 KiB |
| 11_rand_medium_004 | AC | 31 ms | 1264 KiB |
| 12_rand_large_000 | AC | 60 ms | 1328 KiB |
| 12_rand_large_001 | AC | 59 ms | 1324 KiB |
| 12_rand_large_002 | AC | 58 ms | 1328 KiB |
| 12_rand_large_003 | AC | 58 ms | 1284 KiB |
| 12_rand_large_004 | AC | 58 ms | 1280 KiB |
| 15_rand_small_000 | AC | 30 ms | 1136 KiB |
| 15_rand_small_001 | AC | 30 ms | 1216 KiB |
| 15_rand_small_002 | AC | 31 ms | 1160 KiB |
| 15_rand_small_003 | AC | 32 ms | 1160 KiB |
| 15_rand_small_004 | AC | 30 ms | 1188 KiB |
| 20_parallel_small_000 | AC | 32 ms | 1196 KiB |
| 20_parallel_small_001 | AC | 32 ms | 1160 KiB |
| 20_parallel_small_002 | AC | 32 ms | 1260 KiB |
| 20_parallel_small_003 | AC | 34 ms | 1136 KiB |
| 20_parallel_small_004 | AC | 33 ms | 1212 KiB |
| 22_parallel_large_000 | AC | 83 ms | 1288 KiB |
| 22_parallel_large_001 | AC | 84 ms | 1348 KiB |
| 22_parallel_large_002 | AC | 84 ms | 1288 KiB |
| 22_parallel_large_003 | AC | 81 ms | 1288 KiB |
| 22_parallel_large_004 | AC | 84 ms | 1288 KiB |
| 32_bigDist_large_000 | AC | 50 ms | 1328 KiB |
| 32_bigDist_large_001 | AC | 49 ms | 1328 KiB |
| 32_bigDist_large_002 | AC | 48 ms | 1320 KiB |
| 32_bigDist_large_003 | AC | 51 ms | 1328 KiB |
| 32_bigDist_large_004 | AC | 48 ms | 1288 KiB |
| 42_bigCost_large_000 | AC | 71 ms | 1344 KiB |
| 42_bigCost_large_001 | AC | 73 ms | 1320 KiB |
| 42_bigCost_large_002 | AC | 77 ms | 1348 KiB |
| 42_bigCost_large_003 | AC | 76 ms | 1332 KiB |
| 42_bigCost_large_004 | AC | 74 ms | 1284 KiB |
| 50_gen_rand_000 | AC | 31 ms | 1220 KiB |
| 50_gen_rand_001 | AC | 32 ms | 1156 KiB |
| 50_gen_rand_002 | AC | 31 ms | 1200 KiB |
| 50_gen_rand_003 | AC | 31 ms | 1212 KiB |
| 50_gen_rand_004 | AC | 30 ms | 1144 KiB |
| 52_gen_rand_000 | AC | 63 ms | 1392 KiB |
| 52_gen_rand_001 | AC | 60 ms | 1324 KiB |
| 52_gen_rand_002 | AC | 59 ms | 1468 KiB |
| 52_gen_rand_003 | AC | 57 ms | 1288 KiB |
| 52_gen_rand_004 | AC | 61 ms | 1284 KiB |