Submission #1771999


Source Code Expand

import std.algorithm, std.conv, std.range, std.stdio, std.string;

void main()
{
  auto rd = readln.split.to!(int[]), n = rd[0], m = rd[1], k = rd[2];
  auto c = readln.split;

  auto scc = StronglyConnectedComponents!int(n);
  foreach (i; 0..m) {
    auto rd2 = readln.splitter;
    auto a = rd2.front.to!int-1; rd2.popFront();
    auto b = rd2.front.to!int-1;
    scc.addEdge(a, b);
  }

  auto r = scc.run(), nr = r.length.to!int, s = new string[](nr);

  int[int] buf;
  foreach (int i, ri; r) {
    char[] sb;
    foreach (rij; ri) {
      buf[rij] = i;
      sb ~= c[rij][0];
    }
    (cast(ubyte[])sb).sort();
    s[i] = sb.to!string;
  }

  auto g = new int[][](nr);
  foreach (u; 0..n)
    foreach (v; scc.adj[u])
      if (buf[u] != buf[v])
        g[buf[u]] ~= buf[v];

  auto d = new int[](nr), dp = new string[][](nr, n+1);
  foreach_reverse (u; 0..nr) {
    foreach (v; g[u]) d[u] = max(d[u], d[v]);
    d[u] += s[u].length.to!int;

    foreach (i; 0..s[u].length+1)
      dp[u][i] = s[u][0..i];
    dp[u][s[u].length+1..$] = "|";

    foreach (i; 0..s[u].length+1) {
      foreach (v; g[u])
        foreach (j; 0..d[v]+1)
          dp[u][i+j] = min(dp[u][i+j], s[u][0..i] ~ dp[v][j]);
    }
  }

  auto ans = "|";
  foreach (i; 0..nr)
    if (d[i] >= k)
      ans = min(ans, dp[i][k]);

  writeln(ans == "|" ? "-1" : ans);
}

struct StronglyConnectedComponents(Node)
{
  import std.algorithm, std.container;

  Node n;
  Node[][] adj, rdj;

  this(Node n)
  {
    this.n = n;
    adj = new Node[][](n);
    rdj = new Node[][](n);
  }

  auto addEdge(Node src, Node dst)
  {
    adj[src] ~= dst;
    rdj[dst] ~= src;
  }

  auto dfs(Node s, Node[][] adj, ref bool[] visited)
  {
    auto q = SList!Node(s);
    visited[s] = true;
    Node[] comp;
    while (!q.empty) {
      auto u = q.front; q.removeFront();
      foreach (v; adj[u])
        if (!visited[v]) {
          visited[v] = true;
          q.insertFront(v);
        }
      comp ~= u;
    }
    comp.reverse();
    return comp;
  }

  auto run()
  {
    Node[] ord;
    Node[][] scc;
    auto visited = new bool[](n);

    foreach (u; 0..n)
      if (!visited[u]) ord ~= dfs(u, adj, visited);

    visited[] = false;

    foreach_reverse (u; ord)
      if (!visited[u]) scc ~= dfs(u, rdj, visited);

    return scc;
  }
}

Submission Info

Submission Time
Task C - 有向グラフ
User tesh
Language D (DMD64 v2.070.1)
Score 0
Code Size 2413 Byte
Status WA
Exec Time 20 ms
Memory 14204 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 100
Status
AC × 4
AC × 30
WA × 2
Set Name Test Cases
Sample subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.txt
All subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.txt, subtask1_manual01.txt, subtask1_manual02.txt, subtask1_manual03.txt, subtask1_manual04.txt, subtask1_manual05.txt, subtask1_manual06.txt, subtask1_manual07.txt, subtask1_manual08.txt, subtask1_random01.txt, subtask1_random02.txt, subtask1_random03.txt, subtask1_random04.txt, subtask1_random05.txt, subtask1_special01.txt, subtask1_special02.txt, subtask1_special03.txt, subtask1_special04.txt, subtask1_special05.txt, subtask1_special06.txt, subtask1_special07.txt, subtask1_special08.txt, subtask1_special09.txt, subtask1_special10.txt, subtask1_special11.txt, subtask1_special12.txt, subtask1_special13.txt, subtask1_special14.txt, subtask1_special15.txt
Case Name Status Exec Time Memory
subtask0_sample_01.txt AC 1 ms 256 KB
subtask0_sample_02.txt AC 1 ms 256 KB
subtask0_sample_03.txt AC 1 ms 256 KB
subtask0_sample_04.txt AC 1 ms 256 KB
subtask1_manual01.txt AC 1 ms 256 KB
subtask1_manual02.txt AC 1 ms 256 KB
subtask1_manual03.txt AC 1 ms 256 KB
subtask1_manual04.txt AC 1 ms 256 KB
subtask1_manual05.txt AC 1 ms 256 KB
subtask1_manual06.txt AC 1 ms 256 KB
subtask1_manual07.txt AC 1 ms 256 KB
subtask1_manual08.txt AC 1 ms 256 KB
subtask1_random01.txt WA 13 ms 10620 KB
subtask1_random02.txt AC 12 ms 10492 KB
subtask1_random03.txt AC 14 ms 8956 KB
subtask1_random04.txt WA 11 ms 8060 KB
subtask1_random05.txt AC 10 ms 8828 KB
subtask1_special01.txt AC 2 ms 380 KB
subtask1_special02.txt AC 20 ms 11772 KB
subtask1_special03.txt AC 20 ms 13436 KB
subtask1_special04.txt AC 20 ms 12156 KB
subtask1_special05.txt AC 20 ms 11772 KB
subtask1_special06.txt AC 13 ms 9084 KB
subtask1_special07.txt AC 15 ms 11004 KB
subtask1_special08.txt AC 14 ms 10364 KB
subtask1_special09.txt AC 14 ms 10364 KB
subtask1_special10.txt AC 14 ms 10492 KB
subtask1_special11.txt AC 13 ms 8444 KB
subtask1_special12.txt AC 12 ms 8700 KB
subtask1_special13.txt AC 12 ms 9084 KB
subtask1_special14.txt AC 3 ms 4092 KB
subtask1_special15.txt AC 20 ms 14204 KB