#include "garden.h"
#include "gardenlib.h"
#include<bits/stdc++.h>
using namespace std;
const long long inf = (long long) 1e18 + 10;
const int inf1 = (int) 1e9 + 10;
#define int long long
#define dbl long double
#define endl '\n'
#define sc second
#define fr first
#define mp make_pair
#define pb push_back
#define all(x) x.begin(), x.end()
const int maxn = 4e5+10;
int n, mark[maxn], p[maxn], ordc[maxn], nx[maxn], disp[maxn], szc[maxn], tin[maxn], tout[maxn], timer;
vector<pair<int,int>> g[maxn];
vector<int> gtr[maxn];
void dfsc(int v, int ini) {
p[v] = v;
disp[v] = 0;
if(nx[v] == ini) {
szc[mark[v]] = ordc[v]+1;
return;
}
ordc[nx[v]] = ordc[v]+1;
dfsc(nx[v],ini);
}
void dfs(int v, int cur) {
mark[v] = cur;
if(mark[nx[v]] == cur) {
//temos um ciclo
ordc[nx[v]] = 0;
dfsc(nx[v],nx[v]);
tout[v] = timer;
return;
}
else if(mark[nx[v]] == -1){
dfs(nx[v],cur);
}
if(p[v] == -1) {
disp[v] = disp[nx[v]]+1;
gtr[nx[v]].pb(v);
p[v] = p[nx[v]];
}
}
void dfstr(int u) {
tin[u] = timer++;
for(auto v : gtr[u]) dfstr(v);
tout[u] = timer;
}
void count_routes(int32_t N, int32_t M, int32_t P, int32_t R[][2], int32_t Q, int32_t G[]) {
n = N;
for(int i = 0; i < M; i++) {
g[R[i][0]].pb(mp(i,R[i][1]));
g[R[i][1]].pb(mp(i,R[i][0]));
}
for(int i = 0; i < 2*n; i++) {
nx[i] = i;
}
for(int i = 0; i < n; i++) {
sort(all(g[i]));
}
for(int i = 0; i < n; i++) {
nx[i] = g[i][0].sc;
if(g[nx[i]][0].sc == i)
nx[i]+= n;
if(g[i].size() == 1)
nx[i+n] = g[i][0].sc;
else
nx[i+n] = g[i][1].sc;
if(g[nx[i+n]][0].sc == i)
nx[i+n]+= n;
}
for(int i = 0; i < 2*n; i++) {
p[i] = -1;
mark[i] = -1;
ordc[i] = -1;
}
for(int i = 0; i < 2*n; i++) {
if(mark[i] == -1) {
dfs(i,i);
}
}
for(int i = 0; i < 2*n; i++) {
if(p[i] == i) dfstr(i);
}
for(int j = 0; j < Q; j++) {
int ans = 0;
for(int i = 0; i < n; i++) {
int k = G[j];
int v = i;
if(P != p[P]) {
if(p[v] == p[P] && tin[P] <= tin[v] && tout[v] <= tout[P] && k == disp[v]-disp[P])
ans++;
}
else {
if(mark[p[v]] == mark[P] && k >= disp[v] && (ordc[p[v]]+k-disp[v])%szc[mark[p[v]]] == ordc[P])
ans++;
//vai k pra frente de
}
P+= n;
if(P != p[P]) {
if(p[v] == p[P] && tin[P] <= tin[v] && tout[v] <= tout[P] && k == disp[v]-disp[P])
ans++;
}
else {
if(mark[p[v]] == mark[P] && k >= disp[v] && (ordc[p[v]]+k-disp[v])%szc[mark[p[v]]] == ordc[P])
ans++;
//vai k pra frente de
}
P-= n;
}
answer(ans);
// cout << ans << endl;
}
}
// int32_t main() {
// ios::sync_with_stdio(false); cin.tie(0);
// freopen("in.in", "r", stdin);
// // freopen("out.out", "w", stdout);
// int32_t N, M, P;
// cin >> N >> M >> P;
// int32_t R[M][2];
// for(int i = 0; i < M; i++) {
// cin >> R[i][0] >> R[i][1];
// }
// int32_t Q; cin >> Q;
// int32_t G[Q];
// for(int i = 0; i < Q; i++) {
// cin >> G[i];
// }
// count_routes(N,M,P,R,Q,G);
// }
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
19284 KB |
Output is correct |
2 |
Correct |
12 ms |
19284 KB |
Output is correct |
3 |
Correct |
11 ms |
19412 KB |
Output is correct |
4 |
Correct |
10 ms |
19132 KB |
Output is correct |
5 |
Correct |
10 ms |
19144 KB |
Output is correct |
6 |
Correct |
10 ms |
19412 KB |
Output is correct |
7 |
Correct |
10 ms |
19196 KB |
Output is correct |
8 |
Correct |
11 ms |
19336 KB |
Output is correct |
9 |
Correct |
15 ms |
19668 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
19284 KB |
Output is correct |
2 |
Correct |
12 ms |
19284 KB |
Output is correct |
3 |
Correct |
11 ms |
19412 KB |
Output is correct |
4 |
Correct |
10 ms |
19132 KB |
Output is correct |
5 |
Correct |
10 ms |
19144 KB |
Output is correct |
6 |
Correct |
10 ms |
19412 KB |
Output is correct |
7 |
Correct |
10 ms |
19196 KB |
Output is correct |
8 |
Correct |
11 ms |
19336 KB |
Output is correct |
9 |
Correct |
15 ms |
19668 KB |
Output is correct |
10 |
Correct |
10 ms |
19156 KB |
Output is correct |
11 |
Correct |
22 ms |
23636 KB |
Output is correct |
12 |
Correct |
42 ms |
27880 KB |
Output is correct |
13 |
Correct |
48 ms |
41036 KB |
Output is correct |
14 |
Correct |
149 ms |
47480 KB |
Output is correct |
15 |
Correct |
169 ms |
48104 KB |
Output is correct |
16 |
Correct |
124 ms |
40720 KB |
Output is correct |
17 |
Correct |
138 ms |
38384 KB |
Output is correct |
18 |
Correct |
45 ms |
27840 KB |
Output is correct |
19 |
Correct |
164 ms |
47544 KB |
Output is correct |
20 |
Correct |
163 ms |
48084 KB |
Output is correct |
21 |
Correct |
122 ms |
40652 KB |
Output is correct |
22 |
Correct |
123 ms |
38284 KB |
Output is correct |
23 |
Correct |
167 ms |
49908 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
19284 KB |
Output is correct |
2 |
Correct |
12 ms |
19284 KB |
Output is correct |
3 |
Correct |
11 ms |
19412 KB |
Output is correct |
4 |
Correct |
10 ms |
19132 KB |
Output is correct |
5 |
Correct |
10 ms |
19144 KB |
Output is correct |
6 |
Correct |
10 ms |
19412 KB |
Output is correct |
7 |
Correct |
10 ms |
19196 KB |
Output is correct |
8 |
Correct |
11 ms |
19336 KB |
Output is correct |
9 |
Correct |
15 ms |
19668 KB |
Output is correct |
10 |
Correct |
10 ms |
19156 KB |
Output is correct |
11 |
Correct |
22 ms |
23636 KB |
Output is correct |
12 |
Correct |
42 ms |
27880 KB |
Output is correct |
13 |
Correct |
48 ms |
41036 KB |
Output is correct |
14 |
Correct |
149 ms |
47480 KB |
Output is correct |
15 |
Correct |
169 ms |
48104 KB |
Output is correct |
16 |
Correct |
124 ms |
40720 KB |
Output is correct |
17 |
Correct |
138 ms |
38384 KB |
Output is correct |
18 |
Correct |
45 ms |
27840 KB |
Output is correct |
19 |
Correct |
164 ms |
47544 KB |
Output is correct |
20 |
Correct |
163 ms |
48084 KB |
Output is correct |
21 |
Correct |
122 ms |
40652 KB |
Output is correct |
22 |
Correct |
123 ms |
38284 KB |
Output is correct |
23 |
Correct |
167 ms |
49908 KB |
Output is correct |
24 |
Correct |
12 ms |
19156 KB |
Output is correct |
25 |
Correct |
143 ms |
23564 KB |
Output is correct |
26 |
Correct |
208 ms |
27992 KB |
Output is correct |
27 |
Correct |
2345 ms |
41164 KB |
Output is correct |
28 |
Correct |
1232 ms |
47556 KB |
Output is correct |
29 |
Correct |
2698 ms |
48144 KB |
Output is correct |
30 |
Correct |
1484 ms |
40856 KB |
Output is correct |
31 |
Correct |
1617 ms |
38520 KB |
Output is correct |
32 |
Correct |
308 ms |
27808 KB |
Output is correct |
33 |
Correct |
1209 ms |
49368 KB |
Output is correct |
34 |
Correct |
2716 ms |
49912 KB |
Output is correct |
35 |
Correct |
1646 ms |
42292 KB |
Output is correct |
36 |
Correct |
1661 ms |
40012 KB |
Output is correct |
37 |
Correct |
1038 ms |
51852 KB |
Output is correct |
38 |
Correct |
2211 ms |
53524 KB |
Output is correct |