Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int main()
- {
- int n;
- cin >> n;
- vector<int> sr(n);
- vector<int> sc(n);
- for (int i = 0; i < n; ++i)
- {
- cin >> sr[i];
- }
- for (int i = 0; i < n; ++i)
- {
- cin >> sc[i];
- }
- int s = 0;
- int t = 2 * n + 1;
- AdjacencyMatrix network(2 * n + 2);
- for (int i = 0; i < network.size(); ++i)
- {
- network[i].resize(network.size(), Edge::empty());
- }
- for (int i = 0; i < sc.size(); ++i)
- {
- network[s][i + 1] = Edge(sc[i], 0);
- for (int j = 0; j < sr.size(); ++j)
- {
- network[i + 1][1 + n + j] = Edge(100, 0);
- }
- }
- for (int i = 0; i < sr.size(); ++i)
- {
- network[1 + n + i][t] = Edge(sr[i], 0);
- }
- dinic(network, s, t);
- vector<vector<int>> result(n);
- for (int i = 0; i < n; ++i)
- {
- result[i].resize(n, 0);
- }
- for (int i = s + 1; i < s + n + 1; ++i)
- {
- for (int j = s + n + 1; j < t; ++j)
- {
- if (network[i][j].flow != 0)
- {
- result[j - 1 - n][i - 1] = network[i][j].flow;
- }
- }
- }
- for (int i = 0; i < n; ++i)
- {
- int rowSum = 0;
- int columnSum = 0;
- for (int j = 0; j < n; ++j)
- {
- rowSum += result[i][j];
- columnSum += result[j][i];
- }
- if (rowSum != sr[i] || columnSum != sc[i])
- {
- cout << "NO";
- return 0;
- }
- }
- cout << "YES" << endl;
- for (int i = 0; i < n; ++i)
- {
- for (int j = 0; j < n; ++j)
- {
- cout << result[i][j] << ' ';
- }
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement