QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#354018#7701. A (Fast) Walk in the WoodsPetroTarnavskyi#AC ✓33ms4072kbC++202.9kb2024-03-14 20:34:502024-03-14 20:34:51

Judging History

This is the latest submission verdict.

  • [2024-03-14 20:34:51]
  • Judged
  • Verdict: AC
  • Time: 33ms
  • Memory: 4072kb
  • [2024-03-14 20:34:50]
  • Submitted

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'