Submission #84904


Source Code Expand

#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <cmath>
using namespace std;

#define MAX_V 500
#define INF 999999999

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

int V;
vector<edge> G[MAX_V];
double dist[MAX_V];
int prevv[MAX_V], preve[MAX_V];

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

double min_cost_flow(int s, int g, 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] == INF) 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){
            dist[e.to] = dist[v] + e.cost;
            prevv[e.to] = v;
            preve[e.to] = i;
            update = true;
          }
        }
      }
    }

    if(dist[g]== INF){
      return -1;
    }

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

int main(){
  int n;

  while(cin >> n){
    double x[n], y[n];

    for(int i = 0; i < MAX_V; i++){
      G[i].clear();
    }

    for(int i = 0; i < n; i++){
      cin >> x[i] >> y[i];
    }

    //index
    //[0] : s
    //[1] : t
    //[2] ~ [2 + n - 1] : left
    //[2 + n] ~ [2 + n + n - 1] : right

    //s -> left
    for(int i = 2; i <= 2 + n - 1; i++){
      add_edge(0, i, 1, 0);
    }

    //right -> t
    for(int i = 2 + n; i <= 2 + n + n - 1; i++){
      add_edge(i, 1, 1, 0);
    }

    //left -> right
    for(int i = 0; i < n; i++){
      for(int j = 0; j < n; j++){
        if(i == j){
          add_edge(2 + i, 2 + n + j, 1, abs(x[i]));
          continue;
        }

        bool leftFlg = (x[i] < 0);
        bool rightFlg = (x[j] > 0);

        if(leftFlg && rightFlg){
          double dist = sqrt(pow(abs(y[i] - y[j]) / 2.0, 2) +
                             pow(abs(abs(x[i]) - abs(x[j])) / 2.0, 2));
          add_edge(2 + i, 2 + n + j, 1, 2 * dist);
        }
        else if(!leftFlg && !rightFlg){
          add_edge(2 + i, 2 + n + j, 1, 0);
        }
      }
    }

    V = n * 2 + 2;

    cout << fixed << setprecision(10) << min_cost_flow(0, 1, n) << endl;
  }
}

Submission Info

Submission Time
Task B - 玉座の間
User Respect2D
Language C++ (G++ 4.6.4)
Score 200
Code Size 2726 Byte
Status AC
Exec Time 48 ms
Memory 1152 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 37 ms 744 KB
11_rand01.txt AC 22 ms 788 KB
11_rand02.txt AC 23 ms 780 KB
11_rand03.txt AC 23 ms 780 KB
11_rand04.txt AC 23 ms 756 KB
11_rand05.txt AC 23 ms 764 KB
11_rand06.txt AC 23 ms 784 KB
11_rand07.txt AC 21 ms 780 KB
11_rand08.txt AC 22 ms 912 KB
11_rand09.txt AC 22 ms 780 KB
11_rand10.txt AC 40 ms 740 KB
11_rand11.txt AC 22 ms 788 KB
11_rand12.txt AC 21 ms 764 KB
11_rand13.txt AC 23 ms 768 KB
11_rand14.txt AC 22 ms 780 KB
11_rand15.txt AC 21 ms 760 KB
11_rand16.txt AC 23 ms 784 KB
11_rand17.txt AC 22 ms 788 KB
11_rand18.txt AC 23 ms 780 KB
11_rand19.txt AC 23 ms 784 KB
11_rand20.txt AC 23 ms 784 KB
11_rand21.txt AC 22 ms 788 KB
11_rand22.txt AC 21 ms 812 KB
11_rand23.txt AC 22 ms 780 KB
11_rand24.txt AC 20 ms 768 KB
21_rand00.txt AC 22 ms 788 KB
21_rand01.txt AC 22 ms 780 KB
21_rand02.txt AC 40 ms 784 KB
21_rand03.txt AC 23 ms 788 KB
21_rand04.txt AC 22 ms 788 KB
21_rand05.txt AC 22 ms 916 KB
21_rand06.txt AC 23 ms 784 KB
21_rand07.txt AC 22 ms 764 KB
21_rand08.txt AC 22 ms 784 KB
21_rand09.txt AC 22 ms 756 KB
21_rand10.txt AC 23 ms 792 KB
21_rand11.txt AC 22 ms 788 KB
21_rand12.txt AC 22 ms 784 KB
21_rand13.txt AC 23 ms 784 KB
21_rand14.txt AC 22 ms 764 KB
21_rand15.txt AC 22 ms 784 KB
21_rand16.txt AC 22 ms 784 KB
21_rand17.txt AC 22 ms 780 KB
21_rand18.txt AC 20 ms 788 KB
21_rand19.txt AC 22 ms 788 KB
21_rand20.txt AC 22 ms 788 KB
21_rand21.txt AC 27 ms 780 KB
21_rand22.txt AC 22 ms 784 KB
21_rand23.txt AC 39 ms 760 KB
21_rand24.txt AC 21 ms 784 KB
31_rand00.txt AC 33 ms 740 KB
31_rand01.txt AC 20 ms 784 KB
31_rand02.txt AC 22 ms 780 KB
31_rand03.txt AC 22 ms 788 KB
31_rand04.txt AC 22 ms 764 KB
31_rand05.txt AC 22 ms 756 KB
31_rand06.txt AC 22 ms 784 KB
31_rand07.txt AC 22 ms 784 KB
31_rand08.txt AC 20 ms 784 KB
31_rand09.txt AC 22 ms 812 KB
31_rand10.txt AC 23 ms 764 KB
31_rand11.txt AC 22 ms 916 KB
31_rand12.txt AC 22 ms 788 KB
31_rand13.txt AC 24 ms 788 KB
31_rand14.txt AC 22 ms 788 KB
31_rand15.txt AC 21 ms 780 KB
31_rand16.txt AC 20 ms 732 KB
31_rand17.txt AC 22 ms 736 KB
31_rand18.txt AC 20 ms 784 KB
31_rand19.txt AC 20 ms 776 KB
31_rand20.txt AC 21 ms 784 KB
31_rand21.txt AC 21 ms 780 KB
31_rand22.txt AC 22 ms 788 KB
31_rand23.txt AC 21 ms 780 KB
31_rand24.txt AC 21 ms 756 KB
41_rand00.txt AC 23 ms 756 KB
41_rand01.txt AC 23 ms 764 KB
41_rand02.txt AC 23 ms 912 KB
41_rand03.txt AC 25 ms 864 KB
41_rand04.txt AC 26 ms 912 KB
41_rand05.txt AC 23 ms 916 KB
41_rand06.txt AC 22 ms 916 KB
41_rand07.txt AC 30 ms 1048 KB
41_rand08.txt AC 22 ms 732 KB
41_rand09.txt AC 36 ms 900 KB
41_rand10.txt AC 21 ms 776 KB
41_rand11.txt AC 25 ms 892 KB
41_rand12.txt AC 30 ms 1044 KB
41_rand13.txt AC 22 ms 784 KB
41_rand14.txt AC 23 ms 888 KB
41_rand15.txt AC 41 ms 740 KB
41_rand16.txt AC 48 ms 748 KB
41_rand17.txt AC 25 ms 912 KB
41_rand18.txt AC 36 ms 1152 KB
41_rand19.txt AC 36 ms 1040 KB
41_rand20.txt AC 24 ms 908 KB
41_rand21.txt AC 22 ms 888 KB
41_rand22.txt AC 22 ms 888 KB
41_rand23.txt AC 30 ms 1016 KB
41_rand24.txt AC 26 ms 1040 KB