Submission #371303


Source Code Expand

#include <algorithm>
#define REP(i,n) for(int i=0; i<(int)(n); i++)

#include <queue>
#include <cstdio>
inline int getInt(){ int s; scanf("%d", &s); return s; }

#include <set>

using namespace std;

struct Edge{
  int cap; // capacity
  int to;
  int rev; // reverse edge id

  Edge(){}
  Edge(int c, int t, int r) :
    cap(c), to(t), rev(r){}
};

struct CostEdge : public Edge{
  int cost;
  CostEdge() : Edge() {}
  CostEdge(int c, int t, int cs, int r) :
    Edge(c, t, r), cost(cs){}
};

template<class E> // Edge type
class Graph{
public:
  typedef std::vector<std::vector<E> > G;

private:
  G g;

public:
  Graph(int n) : g(G(n)) {}

  void addEdge(int from, int to, int cap){
    g[from].push_back(E(cap, to, g[to].size()));
    g[to].push_back(E(0, from, g[from].size() - 1));
  }

  void addEdge(int from, int to, int cap, int cost){
    g[from].push_back(E(cap, to, cost, g[to].size()));
    g[to].push_back(E(0, from, -cost, g[from].size() - 1));
  }

  G &getRowGraph(){
    return g;
  }
};

template<class E>
int minCostFlow(Graph<E> &graph, int s, int t, int f, bool negative = false){
  typedef pair<int, int> P;
  typename Graph<E>::G &g = graph.getRowGraph();
  int n = g.size();
  int res = 0;
  vector<int> h(n, 0);
  vector<int> prevv(n);
  vector<int> preve(n);
  const int inf = 10000000;

  if(negative){
    vector<int> dist(n, inf);
    dist[s] = 0;

    bool update = true;

    while(update){
      update = false;
      for(int v = 0; v < n; v++){
        if(dist[v] == inf) continue;
        for(int i = 0; i < (int)g[v].size(); i++){
          E &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;
          }
        }
      }
    }

    for(int i = 0; i < n; i++)
      h[i] = dist[i];
  }

  while(f > 0){
    priority_queue<P, vector<P>, greater<P> > que;
    vector<int> dist(n, inf);
    dist[s] = 0;
    que.push(P(0, s));

    while(!que.empty()){
      P p   = que.top(); que.pop();
      int v = p.second;
      if(dist[v] < p.first) continue;
      for(int i = 0; i < (int)g[v].size(); i++){
        E &e = g[v][i];

        if(e.cap > 0 && dist[e.to] > dist[v] + e.cost + h[v] - h[e.to]){
          dist[e.to]  = dist[v] + e.cost + h[v] - h[e.to];
          prevv[e.to] = v;
          preve[e.to] = i;
          que.push(P(dist[e.to], e.to));
        }
      }
    }
    if(dist[t] == inf){
      return -1;
    }

    for(int v = 0; v < n; v++) h[v] += dist[v];

    int d = f;
    for(int v = t; v != s; v = prevv[v]){
      d = min(d, g[prevv[v]][preve[v]].cap);
    }

    f   -= d;
    res += d * h[t];

    for(int v = t; v != s; v = prevv[v]){
      E &e = g[prevv[v]][preve[v]];
      e.cap -= d;
      g[v][e.rev].cap += d;
    }
  }
  return res;
}

template<typename T>
inline T dbl(T t){ return t * t; }

bool canReach(int x1, int y1, int x2, int y2, int t){
  return dbl(x1 - x2) + dbl(y1 - y2) <= dbl(t);
}

int main(){
  const int m = getInt();
  vector<int> rx(m);
  vector<int> ry(m);

  REP(i,m){
    rx[i] = getInt();
    ry[i] = getInt();
  }

  const int n = getInt();
  vector<int> px(n);
  vector<int> py(n);
  vector<int> s(n);
  vector<int> t(n);

  REP(i,n){
    px[i] = getInt();
    py[i] = getInt();
    s[i] = getInt();
    t[i] = getInt();
  }

  Graph<CostEdge> g(2 + m + n);
  const int start = n + m;
  const int goal = n + m + 1;

  REP(i,m)
    g.addEdge(start, n + i, 1, 0);

  REP(i,m) REP(j,n){
    if(canReach(rx[i], ry[i], px[j], py[j], s[j]))
      g.addEdge(n + i, j, 1, -1);
  }

  REP(i,n) REP(j,n){
    if(s[i] >= t[j]){
      if(canReach(px[j], py[j], px[i], py[i], s[i] - t[j]))
        g.addEdge(j, i, 1, -1);
    }
  }

  REP(i,n) g.addEdge(i, goal, 1, 0);

  const int cost = minCostFlow(g, start, goal, m, true);
  puts(-cost == n ? "YES" : "NO");
  // printf("%s\n", -cost == m ? );

  return 0;
}

Submission Info

Submission Time
Task D - ラボライブ タフグローバルフェスティバル
User yukim
Language C++ (GCC 4.9.2)
Score 0
Code Size 4143 Byte
Status WA
Exec Time 390 ms
Memory 21144 KB

Compile Error

./Main.cpp: In function ‘int getInt()’:
./Main.cpp:6:44: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
 inline int getInt(){ int s; scanf("%d", &s); return s; }
                                            ^

Judge Result

Set Name All
Score / Max Score 0 / 200
Status
AC × 46
WA × 8
Set Name Test Cases
All scrambled_00.txt, scrambled_01.txt, scrambled_02.txt, scrambled_03.txt, scrambled_04.txt, scrambled_05.txt, scrambled_06.txt, scrambled_07.txt, scrambled_08.txt, scrambled_09.txt, scrambled_10.txt, scrambled_11.txt, scrambled_12.txt, scrambled_13.txt, scrambled_14.txt, scrambled_15.txt, scrambled_16.txt, scrambled_17.txt, scrambled_18.txt, scrambled_19.txt, scrambled_20.txt, scrambled_21.txt, scrambled_22.txt, scrambled_23.txt, scrambled_24.txt, scrambled_25.txt, scrambled_26.txt, scrambled_27.txt, scrambled_28.txt, scrambled_29.txt, scrambled_30.txt, scrambled_31.txt, scrambled_32.txt, scrambled_33.txt, scrambled_34.txt, scrambled_35.txt, scrambled_36.txt, scrambled_37.txt, scrambled_38.txt, scrambled_39.txt, scrambled_40.txt, scrambled_41.txt, scrambled_42.txt, scrambled_43.txt, scrambled_44.txt, scrambled_45.txt, scrambled_46.txt, scrambled_47.txt, scrambled_48.txt, scrambled_49.txt, scrambled_50.txt, scrambled_51.txt, scrambled_52.txt, scrambled_53.txt
Case Name Status Exec Time Memory
scrambled_00.txt AC 25 ms 672 KB
scrambled_01.txt AC 23 ms 912 KB
scrambled_02.txt AC 24 ms 796 KB
scrambled_03.txt AC 285 ms 20868 KB
scrambled_04.txt WA 286 ms 20968 KB
scrambled_05.txt WA 284 ms 20864 KB
scrambled_06.txt AC 388 ms 21144 KB
scrambled_07.txt WA 390 ms 21144 KB
scrambled_08.txt AC 24 ms 676 KB
scrambled_09.txt WA 26 ms 804 KB
scrambled_10.txt AC 25 ms 800 KB
scrambled_11.txt WA 25 ms 808 KB
scrambled_12.txt WA 25 ms 800 KB
scrambled_13.txt AC 24 ms 924 KB
scrambled_14.txt WA 23 ms 800 KB
scrambled_15.txt AC 24 ms 796 KB
scrambled_16.txt AC 25 ms 800 KB
scrambled_17.txt AC 25 ms 800 KB
scrambled_18.txt AC 26 ms 808 KB
scrambled_19.txt AC 24 ms 928 KB
scrambled_20.txt AC 26 ms 936 KB
scrambled_21.txt AC 24 ms 924 KB
scrambled_22.txt AC 26 ms 932 KB
scrambled_23.txt AC 69 ms 10648 KB
scrambled_24.txt AC 39 ms 3508 KB
scrambled_25.txt AC 137 ms 15648 KB
scrambled_26.txt AC 44 ms 4000 KB
scrambled_27.txt AC 44 ms 3664 KB
scrambled_28.txt AC 49 ms 5416 KB
scrambled_29.txt AC 75 ms 11336 KB
scrambled_30.txt AC 46 ms 5288 KB
scrambled_31.txt AC 81 ms 12832 KB
scrambled_32.txt AC 40 ms 4336 KB
scrambled_33.txt AC 51 ms 6572 KB
scrambled_34.txt AC 29 ms 1952 KB
scrambled_35.txt AC 44 ms 5800 KB
scrambled_36.txt AC 37 ms 3748 KB
scrambled_37.txt AC 24 ms 1056 KB
scrambled_38.txt AC 24 ms 672 KB
scrambled_39.txt AC 23 ms 796 KB
scrambled_40.txt WA 25 ms 812 KB
scrambled_41.txt AC 24 ms 796 KB
scrambled_42.txt AC 22 ms 796 KB
scrambled_43.txt AC 26 ms 676 KB
scrambled_44.txt AC 24 ms 700 KB
scrambled_45.txt AC 24 ms 800 KB
scrambled_46.txt AC 25 ms 796 KB
scrambled_47.txt AC 24 ms 920 KB
scrambled_48.txt AC 25 ms 916 KB
scrambled_49.txt AC 25 ms 680 KB
scrambled_50.txt AC 26 ms 808 KB
scrambled_51.txt AC 24 ms 736 KB
scrambled_52.txt AC 100 ms 17184 KB
scrambled_53.txt AC 22 ms 920 KB