Submission #84065


Source Code Expand

#include <iostream>
#include <iomanip>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <cmath>
#include <cstring>

#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;

typedef pair<double, double> P;

struct edge {int to, rev, cap; double cost;};

const double eps = 1e-8;
const double INF = 1e100;
const int maxV = 102;

int V;
vector<edge> G[maxV];
bool used[maxV];
double dist[maxV];
int prevv[maxV], preve[maxV];

void add_edge(int from, int to, int cap, double cost) {
    G[from].push_back((edge){to,G[to].size(), cap, cost});
    G[to].push_back((edge){from, G[from].size() - 1, 0, -cost});
}

double min_cost_flow(int s, int t, int f) {
    double res = 0;
    while(f > 0) {
        fill(dist, dist + V, INF);
        dist[s] = 0;
        bool update = true;
        while(update) {
            update = false;
            for (int v = 0; v < V; v++) {
                if (dist[v] > 1e10) continue;
                for (int i = 0; i < G[v].size(); i++) {
                    edge &e = G[v][i];
                    if (e.cap > 0 && dist[e.to] - dist[v] - e.cost > eps) {
                        dist[e.to] = dist[v] + e.cost;
                        prevv[e.to] = v;
                        preve[e.to] = i;
                        update = true;
                    }
                }
            }
        }

        if (dist[t] > 1e10) {
            return 0;
        }
        int d = f;
        for (int v = t; v != s; v = prevv[v]) {
            d = min(d, G[prevv[v]][preve[v]].cap);
        }
        f -= d;
        res += dist[t] * d;
        for (int v = t; v != s; v = prevv[v]) {
            edge &e = G[prevv[v]][preve[v]];
            e.cap -= d;
            G[v][e.rev].cap += d;
        }
    }
    return res;
}

double dis(P a, P b) {
    return sqrt((a.first - b.first) * (a.first - b.first) + (a.second - b.second) * (a.second - b.second));
}

int main() {
    int n;
    double ans = 0;
    cin >> n;
    V = 102;
    vector<P> l,r;
    rep(i, n) {
        int x,y;
        cin >> x >> y;
        if (x == 0)continue;
        if (x < 0) l.push_back(make_pair(-x,y));
        else r.push_back(make_pair(x,y));
        ans += abs(x);
    }

    double fmax = 0;
    rep(f,51) {
        rep(i,102)G[i].clear();
        rep(i, l.size()) {
            add_edge(100, i, 1, 0);
        }
        rep(i, r.size()) {
            add_edge(l.size() + i, 101, 1, 0);
        }
        rep(i, l.size()) {
            rep(j, r.size()) {
                if ((l[i].first + r[j].first - dis(l[i], r[j])) > 0)
                    add_edge(i, l.size() + j, 1, -(l[i].first + r[j].first - dis(l[i], r[j])));
            }
        }

        fmax = max(fmax, -min_cost_flow(100, 101, f + 1));
    }
    
    cout << setprecision(10);
    cout << ans - fmax << endl;
    return 0;
}

Submission Info

Submission Time
Task B - 玉座の間
User y3eadgbe
Language C++ (G++ 4.6.4)
Score 200
Code Size 2947 Byte
Status AC
Exec Time 131 ms
Memory 920 KB

Judge Result

Set Name Subtask1 Subtask2 Subtask3 Subtask4
Score / Max Score 50 / 50 50 / 50 50 / 50 50 / 50
Status
AC × 25
AC × 50
AC × 75
AC × 100
Set Name Test Cases
Subtask1 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt
Subtask2 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt
Subtask3 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt, 31_rand00.txt, 31_rand01.txt, 31_rand02.txt, 31_rand03.txt, 31_rand04.txt, 31_rand05.txt, 31_rand06.txt, 31_rand07.txt, 31_rand08.txt, 31_rand09.txt, 31_rand10.txt, 31_rand11.txt, 31_rand12.txt, 31_rand13.txt, 31_rand14.txt, 31_rand15.txt, 31_rand16.txt, 31_rand17.txt, 31_rand18.txt, 31_rand19.txt, 31_rand20.txt, 31_rand21.txt, 31_rand22.txt, 31_rand23.txt, 31_rand24.txt
Subtask4 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt, 31_rand00.txt, 31_rand01.txt, 31_rand02.txt, 31_rand03.txt, 31_rand04.txt, 31_rand05.txt, 31_rand06.txt, 31_rand07.txt, 31_rand08.txt, 31_rand09.txt, 31_rand10.txt, 31_rand11.txt, 31_rand12.txt, 31_rand13.txt, 31_rand14.txt, 31_rand15.txt, 31_rand16.txt, 31_rand17.txt, 31_rand18.txt, 31_rand19.txt, 31_rand20.txt, 31_rand21.txt, 31_rand22.txt, 31_rand23.txt, 31_rand24.txt, 41_rand00.txt, 41_rand01.txt, 41_rand02.txt, 41_rand03.txt, 41_rand04.txt, 41_rand05.txt, 41_rand06.txt, 41_rand07.txt, 41_rand08.txt, 41_rand09.txt, 41_rand10.txt, 41_rand11.txt, 41_rand12.txt, 41_rand13.txt, 41_rand14.txt, 41_rand15.txt, 41_rand16.txt, 41_rand17.txt, 41_rand18.txt, 41_rand19.txt, 41_rand20.txt, 41_rand21.txt, 41_rand22.txt, 41_rand23.txt, 41_rand24.txt
Case Name Status Exec Time Memory
11_rand00.txt AC 21 ms 792 KB
11_rand01.txt AC 20 ms 792 KB
11_rand02.txt AC 24 ms 724 KB
11_rand03.txt AC 18 ms 792 KB
11_rand04.txt AC 19 ms 784 KB
11_rand05.txt AC 20 ms 696 KB
11_rand06.txt AC 20 ms 788 KB
11_rand07.txt AC 20 ms 800 KB
11_rand08.txt AC 20 ms 816 KB
11_rand09.txt AC 20 ms 780 KB
11_rand10.txt AC 19 ms 788 KB
11_rand11.txt AC 20 ms 788 KB
11_rand12.txt AC 20 ms 788 KB
11_rand13.txt AC 20 ms 792 KB
11_rand14.txt AC 18 ms 788 KB
11_rand15.txt AC 20 ms 788 KB
11_rand16.txt AC 19 ms 792 KB
11_rand17.txt AC 20 ms 792 KB
11_rand18.txt AC 20 ms 816 KB
11_rand19.txt AC 19 ms 788 KB
11_rand20.txt AC 21 ms 792 KB
11_rand21.txt AC 20 ms 796 KB
11_rand22.txt AC 20 ms 800 KB
11_rand23.txt AC 20 ms 788 KB
11_rand24.txt AC 20 ms 796 KB
21_rand00.txt AC 20 ms 792 KB
21_rand01.txt AC 19 ms 788 KB
21_rand02.txt AC 19 ms 788 KB
21_rand03.txt AC 20 ms 792 KB
21_rand04.txt AC 19 ms 788 KB
21_rand05.txt AC 19 ms 788 KB
21_rand06.txt AC 19 ms 792 KB
21_rand07.txt AC 20 ms 792 KB
21_rand08.txt AC 20 ms 792 KB
21_rand09.txt AC 20 ms 788 KB
21_rand10.txt AC 20 ms 792 KB
21_rand11.txt AC 20 ms 792 KB
21_rand12.txt AC 20 ms 784 KB
21_rand13.txt AC 21 ms 796 KB
21_rand14.txt AC 20 ms 792 KB
21_rand15.txt AC 19 ms 788 KB
21_rand16.txt AC 20 ms 796 KB
21_rand17.txt AC 19 ms 792 KB
21_rand18.txt AC 21 ms 784 KB
21_rand19.txt AC 20 ms 784 KB
21_rand20.txt AC 20 ms 792 KB
21_rand21.txt AC 18 ms 792 KB
21_rand22.txt AC 20 ms 792 KB
21_rand23.txt AC 20 ms 796 KB
21_rand24.txt AC 19 ms 784 KB
31_rand00.txt AC 18 ms 792 KB
31_rand01.txt AC 20 ms 792 KB
31_rand02.txt AC 22 ms 788 KB
31_rand03.txt AC 20 ms 788 KB
31_rand04.txt AC 21 ms 788 KB
31_rand05.txt AC 21 ms 796 KB
31_rand06.txt AC 20 ms 780 KB
31_rand07.txt AC 20 ms 788 KB
31_rand08.txt AC 20 ms 788 KB
31_rand09.txt AC 21 ms 792 KB
31_rand10.txt AC 21 ms 796 KB
31_rand11.txt AC 21 ms 696 KB
31_rand12.txt AC 20 ms 788 KB
31_rand13.txt AC 19 ms 784 KB
31_rand14.txt AC 20 ms 784 KB
31_rand15.txt AC 20 ms 784 KB
31_rand16.txt AC 20 ms 784 KB
31_rand17.txt AC 21 ms 792 KB
31_rand18.txt AC 22 ms 792 KB
31_rand19.txt AC 23 ms 792 KB
31_rand20.txt AC 23 ms 784 KB
31_rand21.txt AC 20 ms 792 KB
31_rand22.txt AC 21 ms 792 KB
31_rand23.txt AC 21 ms 788 KB
31_rand24.txt AC 20 ms 792 KB
41_rand00.txt AC 23 ms 788 KB
41_rand01.txt AC 20 ms 788 KB
41_rand02.txt AC 41 ms 792 KB
41_rand03.txt AC 53 ms 796 KB
41_rand04.txt AC 56 ms 696 KB
41_rand05.txt AC 34 ms 792 KB
41_rand06.txt AC 32 ms 784 KB
41_rand07.txt AC 104 ms 792 KB
41_rand08.txt AC 21 ms 788 KB
41_rand09.txt AC 29 ms 700 KB
41_rand10.txt AC 20 ms 664 KB
41_rand11.txt AC 62 ms 788 KB
41_rand12.txt AC 81 ms 796 KB
41_rand13.txt AC 27 ms 780 KB
41_rand14.txt AC 35 ms 788 KB
41_rand15.txt AC 22 ms 788 KB
41_rand16.txt AC 20 ms 792 KB
41_rand17.txt AC 58 ms 788 KB
41_rand18.txt AC 131 ms 920 KB
41_rand19.txt AC 125 ms 912 KB
41_rand20.txt AC 37 ms 796 KB
41_rand21.txt AC 20 ms 792 KB
41_rand22.txt AC 28 ms 668 KB
41_rand23.txt AC 91 ms 788 KB
41_rand24.txt AC 62 ms 792 KB