QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#568431 | #9319. Bull Farm | awu | TL | 1325ms | 78260kb | C++20 | 4.4kb | 2024-09-16 16:29:52 | 2024-09-16 16:29:53 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const i64 N = 2010, M = 1e6 + 10;
i64 n, l, Q;
i64 g[N][N], p[N];
// bool f[N][N];
vector<i64> edges[N], redges[N];
struct node
{
i64 a, b, c, ans;
} q[M];
map<i64, vector<i64>> vec;
i64 get(char a, char b)
{
return ((i64)a - 48) * 50 + ((i64)b - 48);
}
i64 find(i64 x)
{
if (p[x] != x)
p[x] = find(p[x]);
return p[x];
}
void add(i64 a, i64 b)
{
if (a != b)
{
// cout << "add edge a: " << a << " b: " << b << '\n';
edges[a].push_back(b);
redges[b].push_back(a);
}
}
bool extend(queue<i64> &q, unordered_map<i64, i64> &da, unordered_map<i64, i64> &db, bool rev)
{
i64 d = da[q.front()];
while (q.size() && da[q.front()] == d)
{
auto t = q.front();
q.pop();
if (rev)
{
for (auto v : redges[t])
if (find(v) == v)
{
if (db.count(v))
return true;
if (da.count(v))
continue;
da[v] = da[v] + 1;
q.push(v);
}
}
else
{
for (auto v : edges[t])
if (find(v) == v)
{
if (db.count(v))
return true;
if (da.count(v))
continue;
da[v] = da[v] + 1;
q.push(v);
}
}
}
return false;
}
bool bfs(i64 a, i64 b)
{
// cout << "query a: " << a << " b: " << b << '\n';
if (a == b)
return true;
queue<i64> qa, qb;
unordered_map<i64, i64> da, db;
qa.push(a), qb.push(b);
da[a] = db[b] = 0;
while (qa.size() && qb.size())
{
bool t;
if (qa.size() < qb.size())
t = extend(qa, da, db, 0);
else
t = extend(qb, db, da, 1);
if (t)
return true;
}
return false;
}
void solve()
{
cin >> n >> l >> Q;
for (i64 i = 0; i <= n; i++)
{
p[i] = i;
edges[i].clear(), redges[i].clear();
}
for (i64 i = 0; i <= l; i++)
vec[i].clear();
for (i64 i = 1; i <= l; i++)
for (i64 j = 1; j <= n; j++)
{
char a, b;
cin >> a >> b;
g[i][j] = get(a, b);
}
for (i64 i = 1; i <= Q; i++)
{
char ch1, ch2;
cin >> ch1 >> ch2;
q[i].a = get(ch1, ch2);
cin >> ch1 >> ch2;
q[i].b = get(ch1, ch2);
cin >> ch1 >> ch2;
q[i].c = get(ch1, ch2);
vec[q[i].c].push_back(i);
}
for (i64 i = 0; i <= l; i++)
{
set<i64> S;
for (i64 j = 1; j <= n; j++)
S.insert(g[i][j]);
if (S.size() == n)
{
map<i64, i64> mp;
for (i64 j = 1; j <= n; j++)
if (!mp[j])
{
for (i64 k = g[i][j]; k != j; k = g[i][k])
{
mp[k] = true;
i64 a = find(j), b = find(k);
if (a != b)
{
p[b] = a;
}
}
}
}
else if (S.size() == n - 1)
{
i64 t = 1;
while (S.count(t))
t++;
map<i64, i64> mp;
for (i64 j = 1; j <= n; j++)
{
if (mp.count(g[i][j]))
{
add(find(mp[g[i][j]]), find(t));
add(find(j), find(t));
break;
}
mp[g[i][j]] = j;
}
}
for (i64 u : vec[i])
{
// cout << "i: " << i << " u: " << u << '\n';
// cout << "a: " << q[u].a << " b: " << q[u].b << '\n';
q[u].ans = bfs(find(q[u].a), find(q[u].b));
}
}
for (i64 i = 1; i <= Q; i++)
cout << q[i].ans;
cout << '\n';
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
i64 T = 1;
cin >> T;
while (T--)
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5684kb
input:
2 5 2 4 0305040201 0404040404 030300 020500 050102 020501 6 2 4 030603010601 010203060504 030202 060402 050602 060401
output:
1011 0100
result:
ok 2 lines
Test #2:
score: 0
Accepted
time: 1ms
memory: 7924kb
input:
1 3 3 6 020202 030301 030201 020102 030203 010201 010303 020303 010202
output:
010101
result:
ok single line: '010101'
Test #3:
score: 0
Accepted
time: 111ms
memory: 6180kb
input:
200 10 10 5000 01060:04020305080709 0103070:060204050908 09070503080401060:02 050308010204090:0607 03010502040607080:09 03080109020504060:07 06050:09040302080107 07080305010409060:02 030809010:0204060507 0:060908070201050304 060700 090:03 09080: 070405 010703 0:0100 080601 030600 070206 0:0:09 08040...
output:
011110001101101111111111111111111101111111110111011110110110111011010111111111111111111101111111111110111111110111111111111101111111111110111111111111111111110001100111111111111111111111111011101111111111111111111111111111111111111111011011110100111110111111110111111100111111101110111111111101111110...
result:
ok 200 lines
Test #4:
score: 0
Accepted
time: 213ms
memory: 43968kb
input:
1 2000 1 1000000 M=:]A@8UAY7W2JJ4KEHIA[HSCQ1ENSC`JXR;F3PJ:_@41P9Z=9HR8P<<:DUXRR9^WOQFL?NZP6S@=J0^WE32=6;\U0?88]Q_RNPUMT6YU<4<S]H?:7OCQYOT4YAV1^764ENWSDBED>M7A:BI>KSIR48JQ9B=N\5T3N4A2aF0@>3TI81<G7;YE>W`NMP<:IT4CI3D0=GZC3I\CLQJQBA9BDIS9SAM55KaVA<Z@D=>:Y?CQHUQ5U3a6UVI8OKX9_FAF^7=5M85;<0;8YPAM<7Z7PP7A=N...
output:
000101000101100010001000000010010110000001000001001100000000010000100001000000101100000000010000001000000001110000010110100000111100100000001000000000011001010001000001001000100000000100011001100110010000010000101100000011111000000010000101010010000000010101000001010111100000100000000000000101000100...
result:
ok single line: '000101000101100010001000000010...0101000101000000000010101001000'
Test #5:
score: 0
Accepted
time: 1274ms
memory: 78260kb
input:
1 2000 2000 1000000 FVAaH7GRPO;_11Da5J18@3SMG==\G8E8S^6:M4L0JH>MN5IXT>2<7WJ3U8LVJS=;;3F13>0D0>VOIIU@EPHG6ABL6;K?T1PXDERLG07]5C9^GDKG<SBMIW;`4W8P3=469TIPKH0O34523_J5C2MJ17D25Z@=K8H@M>WK<CMK7EO]BPD7B6AW741J5YIHIa1:ERSG>L3N2^F3<4F`DLE@2AA5=8GZK6:192FB736[WMV7:^DA2C:<LK040VJBM3M]WXU50`407TR_?PLF@5VL7OSL...
output:
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
result:
ok single line: '111111111111111111111111111111...1111111111111111111111111111111'
Test #6:
score: 0
Accepted
time: 1325ms
memory: 75228kb
input:
1 2000 2000 1000000 0102030405060708090:0;0<0=0>0?0@0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a101112131415161718191:1;1<1=1>1?1@1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1[1\1]1^1_1`1a202122232425262728292:2;2<2=2>2?2@2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X...
output:
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000...
result:
ok single line: '000000000000000000000000000000...0000000000000000000000000000000'
Test #7:
score: 0
Accepted
time: 1190ms
memory: 75108kb
input:
1 2000 2000 1000000 0102030405060708090:0;0<0=0>0?0@0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a101112131415161718191:1;1<1=1>1?1@1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1[1\1]1^1_1`1a202122232425262728292:2;2<2=2>2?2@2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X...
output:
010001100010000000101000000110010001001010101100100100000001000000101010100010000001011111010000000001001000010101011111001010101010100100010001011011000010010100110110000100010110101110000011111101100110010100100101010000100100101110100000000101100010100111000011001110100010001010000101111001101000...
result:
ok single line: '010001100010000000101000000110...1010101000010010101000100000111'
Test #8:
score: 0
Accepted
time: 678ms
memory: 75900kb
input:
1 2000 2000 1000000 0102030405060708090:0;0<0=0>0?0@0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a101112131415161718191:1;1<1=1>1?1@1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1[1\1]1^1_1`1a202122232425262728292:2;2<2=2>2?2@2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X...
output:
011010100000000000000000001000001100000110000000100001010000000000000010001000000100000000000000000000100000100000000001100000100011010000000000000000000000000010000001000000010001100010000100000001000000000010000000000000001000010100000000001000000000000000000000001100010000000000000101000000101010...
result:
ok single line: '011010100000000000000000001000...0000000000000100000010010000100'
Test #9:
score: 0
Accepted
time: 675ms
memory: 74320kb
input:
1 2000 2000 1000000 1REKN]@]>9D9177?6E8DU65LCS>X3Z4KJ47@?R43H8C2ADQ<T[GGCZI]CO4SCDNAVCE534S1;0LV<:F[R`A[=89FL^BYGU7F:NBDD2F3SYLQS[O407E\V>>;EOTL=W8VAYMRO[KHRZ7^F6?:<G4R9O3AVG1\1OER1MKNMG01R?=;SWMP28:X>2=GLC1LSU<VMKQ5?KQAS^4QDTC07TK=R01WL@6596@D5IKT?YG?HaQPP:<12ZUF?GARFKJXC`NFIaJ;SXC:80V1Q@Q;FJV]3XSJ...
output:
111101100101100100000000101000110011010001100000001001101000001000010101010010100111100010100110000001000000011101001010110000101000111000010011110100010101100101011111000010000001100001000011010001101000000010100011000110101001100010111010110011001101110010001110110101000000110111010100001000011001...
result:
ok single line: '111101100101100100000000101000...1100010101000011110011110111100'
Test #10:
score: -100
Time Limit Exceeded
input:
1 1 2000 1000000 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0...