Submission #372967


Source Code Expand

//#define NDEBUG

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <tuple>
#include <cassert>
#include <numeric>
#include <cstdio>
#include <complex>

using namespace std;
typedef long long ll;
typedef long double D;

/**
 * Dinic法による最大流
 *
 * ほとんど蟻本そのまま
 * template引数のint Vは頂点数
 */
template<int V>
struct MaxFlow {
    using T = int; /// 辺の重みの型
    const T INF = 1<<28;
    struct Edge {
        int to, rev;
        T cap;
    };
    vector<Edge> g[V];
    int level[V];
    int iter[V];
    /// 初期化
    void init() {
        for (int i = 0; i < V; i++) {
            g[i].clear();
        }
    }
    /// 有向辺の追加
    void add(int from, int to, T cap) {
        assert(0 <= from && from < V);
        assert(0 <= to && to < V);
        assert(from != to);
        g[from].push_back(Edge{to, (int)g[to].size(), cap});
        g[to].push_back(Edge{from, (int)g[from].size()-1, 0});
    }
    /// 無向辺の追加
    void add_multi(int from, int to, T cap) {
        g[from].push_back(Edge{to, (int)g[to].size(), cap});
        g[to].push_back(Edge{from, (int)g[from].size()-1, cap});
    }

    void bfs(int s) {
        fill_n(level, V, -1);
        queue<int> que;
        level[s] = 0;
        que.push(s);
        while (!que.empty()) {
            int v = que.front(); que.pop();
            for (Edge e: g[v]) {
                if (e.cap <= 0) continue;
                if (level[e.to] < 0) {
                    level[e.to] = level[v] + 1;
                    que.push(e.to);
                }
            }
        }
    }

    T dfs(int v, int t, T f) {
        if (v == t) return f;
        for (int &i = iter[v]; i < (int)g[v].size(); i++) {
            Edge &e = g[v][i];
            if (e.cap <= 0) continue;
            if (level[v] < level[e.to]) {
                T d = dfs(e.to, t, min(f, e.cap));
                if (d <= 0) continue;
                e.cap -= d;
                g[e.to][e.rev].cap += d;
                return d;
            }
        }
        return 0;
    }

    // sからtへの最大流を返す
    T exec(int s, int t) {
        T flow = 0;
        while (true) {
            bfs(s);
            if (level[t] < 0) return flow;
            fill_n(iter, V, 0);
            T f;
            while ((f = dfs(s, t, INF)) > 0) {
                flow += f;
            }
        }
    }
};

typedef long double R;
typedef complex<R> P;

const R EPS = 1e-10;
const R PI = acos((R)(-1));

/*
 -1 -> neg
  0 -> near 0
  1 -> pos
  */
int sgn(R a) {
    if (a < -EPS) return -1;
    if (a > EPS) return 1;
    return 0;
}

int sgn(R a, R b) {
    return sgn(b-a);
}

P yubi[3];
MaxFlow<3000> mf;
P note[1010];
int sn[1010], tn[1010];
int main() {
    mf.init();
    int m;
    cin >> m;
    //0..m yubi
    //10..n+10 note
    //1100 start 1101 end
    //1500 offset
    int sv = 1100, ev = 1101, off = 1500;
    for (int i = 0; i < m; i++) {
        R x, y;
        cin >> x >> y;
        yubi[i] = P(x, y);
        mf.add(sv, i, 1);
        mf.add(i+off, ev, 1);
    }

    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        R x, y;
        cin >> x >> y >> sn[i] >> tn[i];
        note[i] = P(x, y);
        mf.add(sv, i+10, 1);
        mf.add(i+off+10, ev, 1);
        for (int j = 0; j < m; j++) {
            if (sgn(abs(yubi[j]-note[i]), sn[i]) != -1) {
                mf.add(j, i+off+10, 1);
            }
        }
        for (int j = 0; j < i; j++) {
            assert(sn[i]-tn[j] >= 0);
            if (sgn(abs(note[j]-note[i]), sn[i]-tn[j]) != -1) {
                mf.add(j+10, i+off+10, 1);
            }
        }
    }
    if (m+n - mf.exec(sv, ev) <= m) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
    return 0;
}

Submission Info

Submission Time
Task D - ラボライブ タフグローバルフェスティバル
User yosupo
Language C++11 (GCC 4.9.2)
Score 200
Code Size 4052 Byte
Status AC
Exec Time 181 ms
Memory 16548 KB

Judge Result

Set Name All
Score / Max Score 200 / 200
Status
AC × 54
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 24 ms 1048 KB
scrambled_01.txt AC 24 ms 860 KB
scrambled_02.txt AC 25 ms 1052 KB
scrambled_03.txt AC 120 ms 16548 KB
scrambled_04.txt AC 119 ms 16544 KB
scrambled_05.txt AC 121 ms 16548 KB
scrambled_06.txt AC 120 ms 16536 KB
scrambled_07.txt AC 120 ms 16544 KB
scrambled_08.txt AC 25 ms 1044 KB
scrambled_09.txt AC 25 ms 916 KB
scrambled_10.txt AC 25 ms 1052 KB
scrambled_11.txt AC 25 ms 860 KB
scrambled_12.txt AC 24 ms 1048 KB
scrambled_13.txt AC 25 ms 1044 KB
scrambled_14.txt AC 26 ms 932 KB
scrambled_15.txt AC 27 ms 928 KB
scrambled_16.txt AC 25 ms 1048 KB
scrambled_17.txt AC 25 ms 1044 KB
scrambled_18.txt AC 27 ms 1040 KB
scrambled_19.txt AC 25 ms 1048 KB
scrambled_20.txt AC 28 ms 984 KB
scrambled_21.txt AC 25 ms 1052 KB
scrambled_22.txt AC 25 ms 932 KB
scrambled_23.txt AC 72 ms 7208 KB
scrambled_24.txt AC 36 ms 2336 KB
scrambled_25.txt AC 110 ms 12452 KB
scrambled_26.txt AC 38 ms 2988 KB
scrambled_27.txt AC 37 ms 2724 KB
scrambled_28.txt AC 67 ms 4976 KB
scrambled_29.txt AC 98 ms 7968 KB
scrambled_30.txt AC 68 ms 4856 KB
scrambled_31.txt AC 113 ms 9376 KB
scrambled_32.txt AC 49 ms 3616 KB
scrambled_33.txt AC 114 ms 5104 KB
scrambled_34.txt AC 41 ms 1824 KB
scrambled_35.txt AC 101 ms 4516 KB
scrambled_36.txt AC 62 ms 2980 KB
scrambled_37.txt AC 27 ms 1068 KB
scrambled_38.txt AC 23 ms 944 KB
scrambled_39.txt AC 22 ms 936 KB
scrambled_40.txt AC 23 ms 1052 KB
scrambled_41.txt AC 24 ms 1048 KB
scrambled_42.txt AC 23 ms 1056 KB
scrambled_43.txt AC 24 ms 932 KB
scrambled_44.txt AC 24 ms 928 KB
scrambled_45.txt AC 23 ms 1052 KB
scrambled_46.txt AC 24 ms 928 KB
scrambled_47.txt AC 24 ms 936 KB
scrambled_48.txt AC 25 ms 924 KB
scrambled_49.txt AC 24 ms 1048 KB
scrambled_50.txt AC 24 ms 1052 KB
scrambled_51.txt AC 24 ms 928 KB
scrambled_52.txt AC 181 ms 14240 KB
scrambled_53.txt AC 25 ms 1056 KB