답안 #223046

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
223046 2020-04-14T14:52:23 Z dolphingarlic 시간이 돈 (balkan11_timeismoney) C++14
20 / 100
32 ms 1144 KB
#include <bits/stdc++.h>
#define FOR(i, x, y) for (int i = x; i < y; i++)
typedef long long ll;
using namespace std;

struct Line {
    int u, v;
    ll t, c;
} lines[10000];

bool operator<(Line A, Line B) { return A.t + A.c < B.t + B.c; }

int cmp[200];

int find(int A) {
    while (A != cmp[A]) cmp[A] = cmp[cmp[A]], A = cmp[A];
    return A;
}

void onion(int A, int B) { cmp[find(A)] = cmp[find(B)]; }

set<Line> graph[200];
bool has_cycle[200];
vector<Line> in_cycle;

void dfs(int target, int node, int parent = -1) {
    if (node == target) {
        has_cycle[node] = true;
        return;
    }
    for (Line i : graph[node]) {
        if (i.u != parent && i.v != parent) {
            dfs(target, node == i.u ? i.v : i.u, node);
            if (has_cycle[node == i.u ? i.v : i.u]) {
                in_cycle.push_back(i);
                has_cycle[node] = true;
                return;
            }
        }
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin >> n >> m;
    FOR(i, 0, m) cin >> lines[i].u >> lines[i].v >> lines[i].t >> lines[i].c;
    sort(lines, lines + m);
    iota(cmp, cmp + n, 0);

    set<Line> res;
    ll t = 0, c = 0;
    FOR(i, 0, m) {
        if (find(lines[i].u) != find(lines[i].v)) {
            t += lines[i].t, c += lines[i].c;
            onion(lines[i].u, lines[i].v);
            res.insert(lines[i]);
            graph[lines[i].u].insert(lines[i]);
            graph[lines[i].v].insert(lines[i]);
        } else {
            fill(has_cycle, has_cycle + n, false);
            in_cycle.clear();
            dfs(lines[i].u, lines[i].v);

            ll best = t * c;
            Line to_remove = lines[i];
            for (Line j : in_cycle) {
                if ((t - j.t + lines[i].t) * (c - j.c + lines[i].c) < best) {
                    best = (t - j.t + lines[i].t) * (c - j.c + lines[i].c);
                    to_remove = j;
                }
            }
            if (best != t * c) {
                res.erase(to_remove);
                res.insert(lines[i]);
                graph[to_remove.u].erase(to_remove);
                graph[to_remove.v].erase(to_remove);
                graph[lines[i].u].insert(lines[i]);
                graph[lines[i].v].insert(lines[i]);
                t += lines[i].t - to_remove.t;
                c += lines[i].c - to_remove.c;
            }
        }
    }

    assert(res.size() == n - 1);
    cout << t << ' ' << c << '\n';
    for (Line i : res) cout << i.u << ' ' << i.v << '\n';
    return 0;
}

Compilation message

In file included from /usr/include/c++/7/cassert:44:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:33,
                 from timeismoney.cpp:1:
timeismoney.cpp: In function 'int main()':
timeismoney.cpp:87:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     assert(res.size() == n - 1);
            ~~~~~~~~~~~^~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 5 ms 640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
4 Runtime error 5 ms 512 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Runtime error 6 ms 640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
6 Runtime error 6 ms 768 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 9 ms 640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Runtime error 15 ms 1024 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Correct 5 ms 384 KB Output is correct
10 Runtime error 5 ms 512 KB Execution killed with signal 11 (could be triggered by violating memory limits)
11 Correct 5 ms 384 KB Output is correct
12 Runtime error 6 ms 640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
13 Runtime error 5 ms 512 KB Execution killed with signal 11 (could be triggered by violating memory limits)
14 Runtime error 6 ms 640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Runtime error 5 ms 640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
16 Runtime error 11 ms 640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
17 Runtime error 11 ms 768 KB Execution killed with signal 11 (could be triggered by violating memory limits)
18 Runtime error 11 ms 640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
19 Runtime error 32 ms 1144 KB Execution killed with signal 11 (could be triggered by violating memory limits)
20 Runtime error 25 ms 1024 KB Execution killed with signal 11 (could be triggered by violating memory limits)