提出 #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
結果
AC × 56
セット名 テストケース
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