Submission #1794822


Source Code Expand

#include<bits/stdc++.h>

using namespace std;

using vi = vector< int >;
using vii = vector< vi >;

struct Bipartite_Matching
{
  vector< vector< int > > graph;
  vector< int > match, alive, used;
  int timestamp;

  Bipartite_Matching(int n)
  {
    timestamp = 0;
    graph.resize(n);
    alive.assign(n, 1);
    used.assign(n, 0);
    match.assign(n, -1);
  }

  void add_edge(int u, int v)
  {
    graph[u].push_back(v);
    graph[v].push_back(u);
  }

  bool dfs(int v)
  {
    used[v] = timestamp;
    for(int i = 0; i < graph[v].size(); i++) {
      int u = graph[v][i], w = match[u];
      if(alive[u] == 0) continue;
      if(w == -1 || (used[w] != timestamp && dfs(w))) {
        match[v] = u;
        match[u] = v;
        return (true);
      }
    }
    return (false);
  }

  int bipartite_matching()
  {
    int ret = 0;
    for(int i = 0; i < graph.size(); i++) {
      if(alive[i] == 0) continue;
      if(match[i] == -1) {
        ++timestamp;
        ret += dfs(i);
      }
    }
    return (ret);
  }
};

struct Fix_Matching : Bipartite_Matching
{
  Fix_Matching(int sz) : Bipartite_Matching(sz) {}

  int add(int k) // 加える
  {
    alive[k] = 1;
    ++timestamp;
    return (dfs(k));
  }

  int kill(int k) // 消す
  {
    alive[k] = 0;
    if(match[k] == -1) return (0);
    match[match[k]] = -1;
    ++timestamp;
    int ret = dfs(match[k]);
    match[k] = -1;
    return (ret - 1);
  }
};

int main()
{
  int N;
  cin >> N;
  vector< vii > v(26, vii(N));
  for(int i = 0; i < N; i++) {
    string s;
    cin >> s;
    for(int j = 0; j < s.size(); j++) {
      v[s[j] - 'a'][i].push_back(j);
    }
  }

  for(int i = 0; i < 26; i++) {
    const int P = 100000;
    Fix_Matching flow(P + N);
    for(int j = 0; j < N; j++) {
      for(int k : v[i][j]) {
        flow.add_edge(k, P + j);
      }
    }
    for(int j = 0; j < P; j++) flow.kill(j);
    int f = 0, k = 0;

    for(int j = 0; j < P; j++) {
      while(k < P && k - j < N) {
        f += flow.add(k++);
      }
      if(f == N) {
        cout << "YES" << endl;
        return (0);
      }
      f += flow.kill(j);
    }
  }
  cout << "NO" << endl;
}

Submission Info

Submission Time
Task B - コメント
User ei13333
Language C++14 (GCC 5.4.1)
Score 30
Code Size 2257 Byte
Status TLE
Exec Time 2104 ms
Memory 7740 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 0 / 60
Status
AC × 2
AC × 18
AC × 45
TLE × 1
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
Subtask1 sample_01.txt, sample_02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt
Subtask2 sample_01.txt, sample_02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt, subtask2_16.txt, subtask2_17.txt, subtask2_18.txt, subtask2_19.txt, subtask2_20.txt, subtask2_21.txt, subtask2_22.txt, subtask2_23.txt, subtask2_24.txt, subtask2_25.txt, subtask2_26.txt, subtask2_27.txt, subtask2_28.txt
Case Name Status Exec Time Memory
sample_01.txt AC 6 ms 3776 KB
sample_02.txt AC 37 ms 3776 KB
subtask1_01.txt AC 36 ms 3776 KB
subtask1_02.txt AC 37 ms 3900 KB
subtask1_03.txt AC 37 ms 3840 KB
subtask1_04.txt AC 37 ms 3840 KB
subtask1_05.txt AC 24 ms 3900 KB
subtask1_06.txt AC 37 ms 3840 KB
subtask1_07.txt AC 3 ms 3840 KB
subtask1_08.txt AC 41 ms 3900 KB
subtask1_09.txt AC 3 ms 3840 KB
subtask1_10.txt AC 38 ms 3840 KB
subtask1_11.txt AC 37 ms 3840 KB
subtask1_12.txt AC 37 ms 3840 KB
subtask1_13.txt AC 13 ms 3840 KB
subtask1_14.txt AC 37 ms 3840 KB
subtask1_15.txt AC 15 ms 3840 KB
subtask1_16.txt AC 37 ms 3840 KB
subtask2_01.txt AC 13 ms 4480 KB
subtask2_02.txt AC 197 ms 4540 KB
subtask2_03.txt AC 19 ms 5180 KB
subtask2_04.txt AC 44 ms 4540 KB
subtask2_05.txt AC 9 ms 4864 KB
subtask2_06.txt TLE 2104 ms 7740 KB
subtask2_07.txt AC 12 ms 7672 KB
subtask2_08.txt AC 13 ms 4480 KB
subtask2_09.txt AC 195 ms 4540 KB
subtask2_10.txt AC 41 ms 4284 KB
subtask2_11.txt AC 175 ms 4540 KB
subtask2_12.txt AC 56 ms 4540 KB
subtask2_13.txt AC 20 ms 4540 KB
subtask2_14.txt AC 197 ms 4540 KB
subtask2_15.txt AC 34 ms 4540 KB
subtask2_16.txt AC 112 ms 4540 KB
subtask2_17.txt AC 72 ms 4480 KB
subtask2_18.txt AC 98 ms 4540 KB
subtask2_19.txt AC 87 ms 4540 KB
subtask2_20.txt AC 58 ms 4668 KB
subtask2_21.txt AC 53 ms 4608 KB
subtask2_22.txt AC 53 ms 4608 KB
subtask2_23.txt AC 33 ms 4668 KB
subtask2_24.txt AC 50 ms 4736 KB
subtask2_25.txt AC 53 ms 4608 KB
subtask2_26.txt AC 30 ms 4664 KB
subtask2_27.txt AC 167 ms 4664 KB
subtask2_28.txt AC 167 ms 4664 KB