提出 #70487406
ソースコード 拡げる
import std.conv, std.functional, std.range, std.stdio, std.string;
import std.algorithm, std.array, std.bigint, std.bitmanip, std.complex, std.container, std.math, std.mathspecial, std.numeric, std.regex, std.typecons;
import core.bitop;
class EOFException : Throwable { this() { super("EOF"); } }
string[] tokens;
string readToken() { for (; tokens.empty; ) { if (stdin.eof) { throw new EOFException; } tokens = readln.split; } auto token = tokens.front; tokens.popFront; return token; }
int readInt() { return readToken.to!int; }
long readLong() { return readToken.to!long; }
string COLOR(string s = "") { return "\x1b[" ~ s ~ "m"; }
bool chmin(T)(ref T t, in T f) { if (t > f) { t = f; return true; } else { return false; } }
bool chmax(T)(ref T t, in T f) { if (t < f) { t = f; return true; } else { return false; } }
int binarySearch(alias pred, T)(in T[] as) { int lo = -1, hi = cast(int)(as.length); for (; lo + 1 < hi; ) { const mid = (lo + hi) >> 1; (unaryFun!pred(as[mid]) ? hi : lo) = mid; } return hi; }
int lowerBound(T)(in T[] as, T val) { return as.binarySearch!(a => (a >= val)); }
int upperBound(T)(in T[] as, T val) { return as.binarySearch!(a => (a > val)); }
enum INF = 1001001001;
void main() {
try {
for (; ; ) {
const numCases = readInt;
foreach (caseId; 0 .. numCases) {
const N = readInt;
const M = readInt;
auto A = new int[M];
auto B = new int[M];
foreach (i; 0 .. M) {
A[i] = readInt - 1;
B[i] = readInt - 1;
}
auto P = new int[N];
foreach (j; 0 .. N) P[j] = readInt - 1;
auto invP = new int[N];
invP[] = -1;
foreach (j; 0 .. N) invP[P[j]] = j;
foreach (i; 0 .. M) {
A[i] = P[A[i]];
B[i] = P[B[i]];
}
debug writefln("A = %s, B = %s", A, B);
P = invP = null;
auto graph = new int[][N];
foreach (i; 0 .. M) {
graph[A[i]] ~= B[i];
}
/*
gs: l -> known
hs: known -> r
*/
auto fs = new int[N];
auto gs = new int[N];
auto hs = new int[N];
fs[] = 1;
gs[] = -INF;
hs[] = -INF;
foreach (u; 0 .. N) {
chmax(fs[u], gs[u]);
chmax(hs[u], fs[u]);
if (u + 1 < N) {
chmax(gs[u + 1], gs[u]);
chmax(hs[u + 1], hs[u]);
}
foreach (v; graph[u]) {
chmax(fs[v], fs[u] + 1);
chmax(gs[v], fs[u]);
chmax(fs[v], hs[u] + 1);
}
}
debug {
writeln(fs);
writeln(gs);
writeln(hs);
}
const ans = N - fs.maxElement;
writeln(ans);
debug {{
int[][] pss;
{
auto ps = iota(N).array;
do {
bool topo = true;
foreach (i; 0 .. M) {
topo = topo && (ps[A[i]] < ps[B[i]]);
}
if (topo) {
pss ~= ps.dup;
}
} while (ps.nextPermutation);
}
int brt = int.max;
int hm;
foreach (h; 0 .. 1 << N) {
int cnt;
foreach (ps; pss) {
bool ok = true;
foreach (u; 0 .. N) if (h >> u & 1) {
ok = ok && (ps[u] == u);
}
if (ok) ++cnt;
}
assert(cnt >= 1);
if (cnt == 1) {
if (chmin(brt, popcnt(h))) hm = h;
}
}
write("brt = ", brt, "; ");
foreach (u; 0 .. N) write(hm >> u & 1);
writeln;
if (brt != ans) {
stderr.writeln("FAIL");
stderr.writeln(N, " ", M);
foreach (i; 0 .. M) {
stderr.writeln(A[i] + 1, " ", B[i] + 1);
}
foreach (u; 0 .. N) stderr.write(u + 1, " ");
stderr.writeln;
assert(false);
}
}}
}
}
} catch (EOFException e) {
}
}
/*
1 0
1
6 5
3 4
4 5
1 2
1 5
3 6
1 2 3 4 5 6
*/
提出情報
| 提出日時 | |
|---|---|
| 問題 | A - Communicate Topological Order |
| ユーザ | hos_lyric |
| 言語 | D (LDC 1.32.2) |
| 得点 | 700 |
| コード長 | 4284 Byte |
| 結果 | AC |
| 実行時間 | 78 ms |
| メモリ | 27108 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 700 / 700 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sample.txt |
| All | dense_1.txt, dense_10.txt, dense_2.txt, dense_3.txt, dense_4.txt, dense_5.txt, dense_6.txt, dense_7.txt, dense_8.txt, dense_9.txt, line_1.txt, line_10.txt, line_2.txt, line_3.txt, line_4.txt, line_5.txt, line_6.txt, line_7.txt, line_8.txt, line_9.txt, random_1.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_2.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt, random_3.txt, random_30.txt, random_31.txt, random_32.txt, random_33.txt, random_34.txt, random_35.txt, random_36.txt, random_37.txt, random_38.txt, random_39.txt, random_4.txt, random_40.txt, random_5.txt, random_6.txt, random_7.txt, random_8.txt, random_9.txt, sample.txt, small_1.txt, small_2.txt, small_3.txt, small_4.txt, small_5.txt, small_6.txt, small_7.txt, small_8.txt, small_9.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| dense_1.txt | AC | 72 ms | 20104 KiB |
| dense_10.txt | AC | 68 ms | 15780 KiB |
| dense_2.txt | AC | 69 ms | 18532 KiB |
| dense_3.txt | AC | 68 ms | 15796 KiB |
| dense_4.txt | AC | 68 ms | 10736 KiB |
| dense_5.txt | AC | 70 ms | 18448 KiB |
| dense_6.txt | AC | 66 ms | 9324 KiB |
| dense_7.txt | AC | 71 ms | 18024 KiB |
| dense_8.txt | AC | 70 ms | 17216 KiB |
| dense_9.txt | AC | 67 ms | 14476 KiB |
| line_1.txt | AC | 71 ms | 19972 KiB |
| line_10.txt | AC | 73 ms | 21824 KiB |
| line_2.txt | AC | 73 ms | 20144 KiB |
| line_3.txt | AC | 68 ms | 25428 KiB |
| line_4.txt | AC | 60 ms | 17960 KiB |
| line_5.txt | AC | 68 ms | 15556 KiB |
| line_6.txt | AC | 70 ms | 17280 KiB |
| line_7.txt | AC | 64 ms | 18072 KiB |
| line_8.txt | AC | 73 ms | 24392 KiB |
| line_9.txt | AC | 71 ms | 19032 KiB |
| random_1.txt | AC | 77 ms | 18720 KiB |
| random_10.txt | AC | 35 ms | 17608 KiB |
| random_11.txt | AC | 71 ms | 11292 KiB |
| random_12.txt | AC | 78 ms | 18680 KiB |
| random_13.txt | AC | 77 ms | 27108 KiB |
| random_14.txt | AC | 67 ms | 26120 KiB |
| random_15.txt | AC | 78 ms | 18836 KiB |
| random_16.txt | AC | 68 ms | 11208 KiB |
| random_17.txt | AC | 73 ms | 19144 KiB |
| random_18.txt | AC | 58 ms | 18364 KiB |
| random_19.txt | AC | 59 ms | 14988 KiB |
| random_2.txt | AC | 78 ms | 18148 KiB |
| random_20.txt | AC | 77 ms | 18780 KiB |
| random_21.txt | AC | 75 ms | 18700 KiB |
| random_22.txt | AC | 77 ms | 18644 KiB |
| random_23.txt | AC | 76 ms | 19088 KiB |
| random_24.txt | AC | 67 ms | 18368 KiB |
| random_25.txt | AC | 78 ms | 23520 KiB |
| random_26.txt | AC | 43 ms | 14828 KiB |
| random_27.txt | AC | 70 ms | 17248 KiB |
| random_28.txt | AC | 77 ms | 18952 KiB |
| random_29.txt | AC | 77 ms | 18660 KiB |
| random_3.txt | AC | 39 ms | 15808 KiB |
| random_30.txt | AC | 66 ms | 14564 KiB |
| random_31.txt | AC | 74 ms | 26888 KiB |
| random_32.txt | AC | 76 ms | 19800 KiB |
| random_33.txt | AC | 60 ms | 21744 KiB |
| random_34.txt | AC | 76 ms | 18780 KiB |
| random_35.txt | AC | 73 ms | 15784 KiB |
| random_36.txt | AC | 74 ms | 14840 KiB |
| random_37.txt | AC | 78 ms | 18724 KiB |
| random_38.txt | AC | 41 ms | 17644 KiB |
| random_39.txt | AC | 72 ms | 20516 KiB |
| random_4.txt | AC | 69 ms | 19712 KiB |
| random_40.txt | AC | 32 ms | 17576 KiB |
| random_5.txt | AC | 71 ms | 14548 KiB |
| random_6.txt | AC | 78 ms | 18664 KiB |
| random_7.txt | AC | 77 ms | 18728 KiB |
| random_8.txt | AC | 71 ms | 18308 KiB |
| random_9.txt | AC | 71 ms | 13960 KiB |
| sample.txt | AC | 1 ms | 3164 KiB |
| small_1.txt | AC | 55 ms | 3832 KiB |
| small_2.txt | AC | 55 ms | 3924 KiB |
| small_3.txt | AC | 54 ms | 3772 KiB |
| small_4.txt | AC | 54 ms | 3844 KiB |
| small_5.txt | AC | 54 ms | 3776 KiB |
| small_6.txt | AC | 54 ms | 3860 KiB |
| small_7.txt | AC | 54 ms | 3904 KiB |
| small_8.txt | AC | 54 ms | 3864 KiB |
| small_9.txt | AC | 22 ms | 3920 KiB |