QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#486301#1359. Setting MapsYansuan_HClWA 1ms3804kbC++143.7kb2024-07-21 18:37:302024-07-21 18:37:31

Judging History

你现在查看的是最新测评结果

  • [2024-07-21 18:37:31]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3804kb
  • [2024-07-21 18:37:30]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define U(i,l,r) for (int i(l),END##i(r); i<=END##i; ++i)
#define D(i,l,r) for (int i(l),END##i(r); i>=END##i; --i)
#define ms(x, v) memset(x, v, sizeof(x))
#define il __attribute__((always_inline))
#define vc vector
#define ar array
#define pb push_back
#define eb emplace_back
#define el '\n'
using ll = long long;

#define int ll
const int INF = 0x3f3f3f3f3f3f3f3f;
namespace dinic {
	const int N = 2405, M = N * 8;
  struct edge { int v, f, pre; } e[M]; int tail[N], ptr = 1;
  void single(int u, int v, int f) {
    e[++ptr] = {v, f, tail[u]};
    tail[u] = ptr;
  }
  void add(int u, int v, int f) {
    single(u, v, f);
    single(v, u, 0);
		// clog << u << ' ' << v << ' ' << (f == INF ? 999 : f) << endl;
  }
  int layer[N], que[N];
  bool bfs(int s, int t) {
    ms(layer, 0); int l = 0, r = 1; que[0] = s; layer[s] = 1;
    while (l < r) {
      int u = que[l++];
      for (int p = tail[u]; p; p = e[p].pre) {
        auto [v, f, _] = e[p];
        if (!layer[v] && f)
          layer[que[r++] = v] = layer[u] + 1;
      }
    }
    return layer[t];
  }
  int dfs(int u, int in, int t) {
    if (u == t || !in) return in;
    int out = 0;
    for (int &p = tail[u]; p; p = e[p].pre) {
      auto &[v, f, _] = e[p];
      if (!f || layer[v] != layer[u] + 1) continue;
      
      int c = dfs(v, min(f, in), t);
      f -= c; e[p ^ 1].f += c;
      in -= c; out += c;
      if (!in) break;
    }
    return out;
  }
  int flow(int s, int t) {
    int orig[N], res = 0;
    while (bfs(s, t)) {
      memcpy(orig, tail, sizeof(tail));
      int cur = dfs(s, INF, t);
      res += cur;
      // clog << cur << endl;
      memcpy(tail, orig, sizeof(tail));
    }
    return res;
  }
}
#define de dinic::

const int N = 200;
int n, m, k, a, b, c[N]; vc<int> g[N], rg[N];

void bfs(int s, bool *vis, const auto &f) {
	queue<int> q; q.push(s); vis[s] = 1;
	while (q.size()) {
		int u = q.front(); q.pop();
		for (int v : f[u]) if (!vis[v]) {
			vis[v] = 1;
			q.push(v);
		}
	}
}
bool via[N], vib[N];

signed main() {
	// freopen("ava.in", "r", stdin);
	// freopen(".out", "w", stdout);
	ios::sync_with_stdio(0);

	cin >> n >> m >> k >> a >> b; 
	U (i, 1, n) cin >> c[i];
	pair<int, int> eg[505] {};
	U (i, 1, m) {
		auto &[u, v] = eg[i]; cin >> u >> v;
		g[u].pb(v); rg[v].pb(u);
	}
	bfs(a, via, g);
	bfs(b, vib, rg);
	if (!vib[a]) { cout << -1 << el; exit(0); }

	int s = de N - 1, t = de N - 2;
	#define ot n+
	#define val(x) (via[x] && vib[x])
	int pt[N][6] {};
	U (i, 1, n * 2) U (j, 0, k) pt[i][j] = n * 2 * j + i;
	U (i, 1, n * 2) if (val((i - 1) % n + 1)) {
		de add(s, pt[i][0], INF);
		U (j, 0, k) {
			int f = (j ? pt[i][j - 1] : s);
			de add(pt[i][j], f, INF);
		}
		de add(t, pt[i][k], INF);
	}
	U (j, 1, k)
		de add(pt[a][j], (j == k ? t : pt[a][j + 1]), INF);
	U (j, 1, k)
		de add(pt[ot b][j - 1], pt[ot b][j], INF);

	int mark[de N] {};
	U (i, 1, n) if (val(i)) {
		U (j, 0, k) {
			de add(pt[i][j], pt[ot i][j], INF);
			de add(pt[ot i][j], pt[i][j], c[i]);
			mark[de ptr - 1] = mark[de ptr] = i;
		}
		U (j, 1, k)
			de add(pt[ot i][j], pt[i][j - 1], INF);
	}
	U (i, 1, m) {
		auto [u, v] = eg[i];
		if (!val(u) || !val(v)) continue;

		U (j, 0, k) {
			de add(pt[v][j], pt[ot u][j], INF);
		}
	}

	int f = de flow(s, t);
	clog << "#" << f << endl;
	if (f > 2e9) { cout << -1 << el; exit(0); }
	return 0;

	vc<int> ans;
	U (i, 1, de N - 1) for (int p = de tail[i]; p; p = de e[p].pre) if (mark[p]) {
		int v = de e[p].v;
		if (de layer[i] && !de layer[v])  {
			ans.pb(mark[p]);
		}
	}
	
	cout << ans.size() << el;
	for (int u : ans) cout << u << ' ';
	cout << el;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3696kb

input:

3 2 5
1 3
1 60 35
1 2
2 3

output:

-1

result:

ok answer = IMPOSSIBLE

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3804kb

input:

7 11 1
1 7
100 5 7 16 11 12 100
1 2
1 3
1 4
1 5
2 3
2 6
3 6
4 3
4 7
5 7
6 7

output:


result:

wrong output format Unexpected end of file - int32 expected