QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#354018 | #7701. A (Fast) Walk in the Woods | PetroTarnavskyi# | AC ✓ | 33ms | 4072kb | C++20 | 2.9kb | 2024-03-14 20:34:50 | 2024-03-14 20:34:51 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define RFOR(i, a, b) for(int i = (a) - 1; i >= (b); i--)
#define SZ(a) int(a.size())
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define F first
#define S second
typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef double db;
struct Edge
{
int from, to, w;
};
vector<Edge> e;
const int N = 4774;
int x[N], y[N];
//<v>^
int id[N][4];
bool used[N][4];
void addEdge(int i, int j, int w)
{
int tIJ = (x[i] == x[j]);
if(MP(x[i], y[i]) < MP(x[j], y[j]))
tIJ ^= 2;
int tJI = tIJ ^ 2;
id[i][tIJ] = SZ(e);
e.PB({i, j, w});
id[j][tJI] = SZ(e);
e.PB({j, i, w});
}
int where(int from, int to, int t)
{
assert(to != -1);
int cnt = 0;
FOR(j, 0, 4)
{
if(j != (t ^ 2))
cnt += id[to][j] != -1;
}
if(cnt == 0)
return -1;
if(cnt == 1)
{
FOR(j, 0, 4)
{
if((j ^ 2) == t)
continue;
if(id[to][j] != -1)
return j;
}
assert(0);
}
if(cnt == 3)
{
return t;
}
if(cnt == 2)
{
FOR(j, 1, 4)
{
int res = ((t ^ 2) - j + 4) % 4;
if(id[to][res] != -1)
{
assert((res ^ 2) != t);
return res;
}
}
assert(0);
}
assert(0);
}
const int INF = 1e9;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
FOR(i, 0, n)
{
cin >> x[i] >> y[i];
fill(id[i], id[i] + 4, -1);
}
FOR(i, 0, m)
{
int a, b, w;
cin >> a >> b >> w;
addEdge(a - 1, b - 1, w);
}
char ch;
int v, t = 0;
cin >> v >> ch;
v--;
if(ch == 'E' || ch == 'N')
t ^= 2;
if(ch == 'S' || ch == 'N')
t ^= 1;
VI cnt(m, 0);
vector<PII> st;
st.reserve(4 * n);
while(true)
//FOR(it, 0, 1)
{
st.clear();
bool del = false;
while(t != -1 && !used[v][t])
{
st.PB({v, t});
used[v][t] = 1;
int i = id[v][t];
assert(i != -1);
int to = e[i].to;
e[i].w--;
e[i ^ 1].w--;
if(e[i].w == 0)
{
id[v][t] = -1;
id[to][t ^ 2] = -1;
t = where(v, to, t);
v = to;
del = true;
break;
}
t = where(v, to, t);
v = to;
}
for(auto [from, type] : st)
used[from][type] = 0;
if(del)
{
continue;
}
if(t == -1)
{
cout << x[v] << " " << y[v] << "\n";
return 0;
}
vector<PII> cyc;
while(SZ(cyc) == 0 || cyc.back() != MP(v, t))
{
cyc.PB(st.back());
st.pop_back();
}
reverse(ALL(cyc));
int num = INF;
for(auto [from, type] : cyc)
{
int i = id[from][type];
cnt[i / 2]++;
num = min((e[i].w - 1) / cnt[i / 2], num);
}
for(auto [from, type] : cyc)
{
int i = id[from][type];
assert(i != -1);
cnt[i / 2]--;
e[i].w -= num;
e[i ^ 1].w -= num;
assert(e[i].w > 0);
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3612kb
input:
7 8 0 0 5 0 12 0 0 5 5 5 0 10 12 10 1 2 2 2 3 4 4 5 5 6 7 8 1 4 4 2 5 7 3 7 4 4 6 6 4 N
output:
0 0
result:
ok single line: '0 0'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3776kb
input:
2 1 5 5 100 5 1 2 10000 2 W
output:
5 5
result:
ok single line: '5 5'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3852kb
input:
4 4 0 0 0 10 10 10 10 0 1 2 10 2 3 10 3 4 10 1 4 10 4 N
output:
10 0
result:
ok single line: '10 0'
Test #4:
score: 0
Accepted
time: 0ms
memory: 3828kb
input:
9 12 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 1 2 1 2 3 1 4 1 1 4 5 1 5 2 1 5 6 1 6 3 1 6 9 1 9 8 1 8 5 1 8 7 1 7 4 1 8 N
output:
1 0
result:
ok single line: '1 0'
Test #5:
score: 0
Accepted
time: 0ms
memory: 3652kb
input:
9 12 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 1 2 1 2 3 1 4 1 1 4 5 1 5 2 1 5 6 1 6 3 1 6 9 1 9 8 1 8 5 1 8 7 1 7 4 1 8 W
output:
0 1
result:
ok single line: '0 1'
Test #6:
score: 0
Accepted
time: 0ms
memory: 3620kb
input:
4 4 0 0 0 5 5 5 5 0 1 2 1 2 3 1 3 4 1 4 1 1 1 E
output:
0 0
result:
ok single line: '0 0'
Test #7:
score: 0
Accepted
time: 0ms
memory: 3828kb
input:
4 4 0 0 0 5 5 5 5 0 1 2 1 2 3 1 3 4 1 4 1 1 1 N
output:
0 0
result:
ok single line: '0 0'
Test #8:
score: 0
Accepted
time: 0ms
memory: 3616kb
input:
4 4 0 0 0 5 5 5 5 0 1 2 10000 2 3 10000 3 4 10000 4 1 10000 1 E
output:
0 0
result:
ok single line: '0 0'
Test #9:
score: 0
Accepted
time: 0ms
memory: 3556kb
input:
4 4 0 0 0 5 5 5 5 0 1 2 101 2 3 101 3 4 100 4 1 100 1 E
output:
0 0
result:
ok single line: '0 0'
Test #10:
score: 0
Accepted
time: 0ms
memory: 3568kb
input:
4 4 0 0 0 5 5 5 5 0 1 2 101 2 3 100 3 4 101 4 1 100 1 E
output:
0 0
result:
ok single line: '0 0'
Test #11:
score: 0
Accepted
time: 0ms
memory: 3632kb
input:
8 9 0 20 10 20 0 10 10 10 20 10 30 10 20 0 30 0 1 2 10 3 4 10 4 5 11 5 6 10 7 8 10 1 3 10 2 4 10 5 7 10 6 8 10 4 E
output:
20 10
result:
ok single line: '20 10'
Test #12:
score: 0
Accepted
time: 0ms
memory: 3560kb
input:
8 9 0 20 10 20 0 10 10 10 20 10 30 10 20 0 30 0 1 2 10 3 4 10 4 5 10 5 6 10 7 8 10 1 3 10 2 4 10 5 7 10 6 8 10 4 E
output:
10 10
result:
ok single line: '10 10'
Test #13:
score: 0
Accepted
time: 0ms
memory: 3648kb
input:
8 7 0 53 10 17 25 8 25 17 37 0 0 8 10 0 37 53 1 8 100 4 2 200 6 3 100 1 6 100 7 2 100 4 3 100 5 8 100 7 N
output:
37 0
result:
ok single line: '37 0'
Test #14:
score: 0
Accepted
time: 1ms
memory: 3824kb
input:
2400 2999 0 0 1 0 1 1 0 1 2 0 3 0 3 1 2 1 4 0 5 0 5 1 4 1 6 0 7 0 7 1 6 1 8 0 9 0 9 1 8 1 10 0 11 0 11 1 10 1 12 0 13 0 13 1 12 1 14 0 15 0 15 1 14 1 16 0 17 0 17 1 16 1 18 0 19 0 19 1 18 1 20 0 21 0 21 1 20 1 22 0 23 0 23 1 22 1 24 0 25 0 25 1 24 1 26 0 27 0 27 1 26 1 28 0 29 0 29 1 28 1 30 0 31 0 ...
output:
0 1
result:
ok single line: '0 1'
Test #15:
score: 0
Accepted
time: 9ms
memory: 3876kb
input:
2500 3748 0 0 0 10 10 0 10 10 20 0 20 10 30 0 30 10 40 0 40 10 50 0 50 10 60 0 60 10 70 0 70 10 80 0 80 10 90 0 90 10 100 0 100 10 110 0 110 10 120 0 120 10 130 0 130 10 140 0 140 10 150 0 150 10 160 0 160 10 170 0 170 10 180 0 180 10 190 0 190 10 200 0 200 10 210 0 210 10 220 0 220 10 230 0 230 10 ...
output:
12490 10
result:
ok single line: '12490 10'
Test #16:
score: 0
Accepted
time: 1ms
memory: 3804kb
input:
2500 2548 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 100 0 110 0 120 0 130 0 140 0 150 0 160 0 170 0 180 0 190 0 200 0 210 0 220 0 230 0 240 0 250 0 260 0 270 0 280 0 290 0 300 0 310 0 320 0 330 0 340 0 350 0 360 0 370 0 380 0 390 0 400 0 410 0 420 0 430 0 440 0 450 0 460 0 470 0 480 0 490 0 0...
output:
490 0
result:
ok single line: '490 0'
Test #17:
score: 0
Accepted
time: 1ms
memory: 4072kb
input:
2500 2524 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 100 0 110 0 120 0 130 0 140 0 150 0 160 0 170 0 180 0 190 0 200 0 210 0 220 0 230 0 240 0 250 0 260 0 270 0 280 0 290 0 300 0 310 0 320 0 330 0 340 0 350 0 360 0 370 0 380 0 390 0 400 0 410 0 420 0 430 0 440 0 450 0 460 0 470 0 480 0 490 0 0...
output:
240 250
result:
ok single line: '240 250'
Test #18:
score: 0
Accepted
time: 0ms
memory: 3704kb
input:
2500 4420 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 100 0 110 0 120 0 130 0 140 0 150 0 160 0 170 0 180 0 190 0 200 0 210 0 220 0 230 0 240 0 250 0 260 0 270 0 280 0 290 0 300 0 310 0 320 0 330 0 340 0 350 0 360 0 370 0 380 0 390 0 400 0 410 0 420 0 430 0 440 0 450 0 460 0 470 0 480 0 490 0 0...
output:
40 130
result:
ok single line: '40 130'
Test #19:
score: 0
Accepted
time: 1ms
memory: 3752kb
input:
2500 4373 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 100 0 110 0 120 0 130 0 140 0 150 0 160 0 170 0 180 0 190 0 200 0 210 0 220 0 230 0 240 0 250 0 260 0 270 0 280 0 290 0 300 0 310 0 320 0 330 0 340 0 350 0 360 0 370 0 380 0 390 0 400 0 410 0 420 0 430 0 440 0 450 0 460 0 470 0 480 0 490 0 5...
output:
70 70
result:
ok single line: '70 70'
Test #20:
score: 0
Accepted
time: 0ms
memory: 3812kb
input:
2500 3891 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 100 0 110 0 120 0 130 0 140 0 150 0 160 0 170 0 180 0 190 0 200 0 210 0 220 0 230 0 240 0 0 10 10 10 20 10 30 10 40 10 50 10 60 10 70 10 80 10 90 10 100 10 110 10 120 10 130 10 140 10 150 10 160 10 170 10 180 10 190 10 200 10 210 10 220 10 2...
output:
70 160
result:
ok single line: '70 160'
Test #21:
score: 0
Accepted
time: 1ms
memory: 3756kb
input:
2500 4352 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 100 0 110 0 120 0 130 0 140 0 150 0 160 0 170 0 180 0 190 0 200 0 210 0 220 0 230 0 240 0 250 0 260 0 270 0 280 0 290 0 300 0 310 0 320 0 330 0 340 0 350 0 360 0 370 0 380 0 390 0 400 0 410 0 420 0 430 0 440 0 450 0 460 0 470 0 480 0 490 0 5...
output:
300 190
result:
ok single line: '300 190'
Test #22:
score: 0
Accepted
time: 1ms
memory: 3752kb
input:
2500 4363 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 100 0 110 0 120 0 130 0 140 0 150 0 160 0 170 0 180 0 190 0 0 10 10 10 20 10 30 10 40 10 50 10 60 10 70 10 80 10 90 10 100 10 110 10 120 10 130 10 140 10 150 10 160 10 170 10 180 10 190 10 0 20 10 20 20 20 30 20 40 20 50 20 60 20 70 20 80 20...
output:
100 170
result:
ok single line: '100 170'
Test #23:
score: 0
Accepted
time: 1ms
memory: 4016kb
input:
2500 4043 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 100 0 110 0 120 0 130 0 140 0 150 0 160 0 170 0 180 0 190 0 200 0 210 0 220 0 230 0 240 0 250 0 260 0 270 0 280 0 290 0 300 0 310 0 320 0 330 0 340 0 350 0 360 0 370 0 380 0 390 0 400 0 410 0 420 0 430 0 440 0 450 0 460 0 470 0 480 0 490 0 5...
output:
130 90
result:
ok single line: '130 90'
Test #24:
score: 0
Accepted
time: 1ms
memory: 4072kb
input:
2500 2812 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 0 10 10 10 20 10 30 10 40 10 50 10 60 10 70 10 80 10 90 10 0 20 10 20 20 20 30 20 40 20 50 20 60 20 70 20 80 20 90 20 0 30 10 30 20 30 30 30 40 30 50 30 60 30 70 30 80 30 90 30 0 40 10 40 20 40 30 40 40 40 50 40 60 40 70 40 80 40 90 40 0 50 ...
output:
0 10
result:
ok single line: '0 10'
Test #25:
score: 0
Accepted
time: 1ms
memory: 3892kb
input:
2500 4009 0 0 10 0 20 0 30 0 40 0 50 0 60 0 70 0 80 0 90 0 100 0 110 0 120 0 130 0 140 0 150 0 160 0 170 0 180 0 190 0 200 0 210 0 220 0 230 0 240 0 250 0 260 0 270 0 280 0 290 0 300 0 310 0 320 0 330 0 340 0 350 0 360 0 370 0 380 0 390 0 400 0 410 0 420 0 430 0 440 0 450 0 460 0 470 0 480 0 490 0 5...
output:
300 30
result:
ok single line: '300 30'
Test #26:
score: 0
Accepted
time: 2ms
memory: 3676kb
input:
2500 4044 0 0 10 0 20 0 30 0 40 0 0 10 10 10 20 10 30 10 40 10 0 20 10 20 20 20 30 20 40 20 0 30 10 30 20 30 30 30 40 30 0 40 10 40 20 40 30 40 40 40 0 50 10 50 20 50 30 50 40 50 0 60 10 60 20 60 30 60 40 60 0 70 10 70 20 70 30 70 40 70 0 80 10 80 20 80 30 80 40 80 0 90 10 90 20 90 30 90 40 90 0 100...
output:
0 150
result:
ok single line: '0 150'
Test #27:
score: 0
Accepted
time: 33ms
memory: 3856kb
input:
2500 3748 0 998809 1000000 998809 0 998163 1000000 998163 0 996915 1000000 996915 0 996154 1000000 996154 0 994351 1000000 994351 0 993498 1000000 993498 0 992719 1000000 992719 0 992353 1000000 992353 0 991299 1000000 991299 0 991255 1000000 991255 0 990904 1000000 990904 0 989447 1000000 989447 0 ...
output:
1000000 0
result:
ok single line: '1000000 0'