#include <bits/stdc++.h>
#include "garden.h"
using namespace std;
const int MAXN = 150008;
const int INF = 9999999;
vector<pair<int,int> > adj[MAXN];
int graph[2*MAXN], dist[2][2*MAXN], cycle[2][2*MAXN];
int dfs(int x, int u){
if(dist[x][u] != -1) return dist[x][u];
dist[x][u] = -INF;
return dist[x][u] = dfs(x,graph[u]) + 1;
}
int cyc(int x, int v, int u){
if(cycle[x][u] != -1) return cycle[x][u];
cycle[x][u] = u == v ? 0 : -INF;
return cycle[x][u] = cyc(x,v,graph[u]) + 1;
}
void count_routes(int N, int M, int P, int R[][2], int Q, int G[]){
for(int i=0;i<M;i++){
adj[R[i][0]].emplace_back(i,R[i][1]);
adj[R[i][1]].emplace_back(i,R[i][0]);
}
for(int i=0;i<N;i++){
if(!adj[i].empty()){
if(adj[i].size() == 1){
int nxt = adj[i][0].second;
int rank = adj[i][0].first;
graph[i<<1] = nxt<<1|(rank == adj[nxt][0].first);
graph[i<<1|1] = nxt<<1|(rank == adj[nxt][0].first);
}else{
int nxt = adj[i][0].second;
int rank = adj[i][0].first;
int alter = adj[i][1].second;
int alter_rank = adj[i][1].first;
graph[i<<1] = nxt<<1|(rank == adj[nxt][0].first);
graph[i<<1|1] = alter<<1|(alter_rank == adj[alter][0].first);
}
}
}
memset(dist,-1,sizeof dist);
memset(cycle,-1,sizeof cycle);
dist[0][P<<1] = dist[1][P<<1|1] = 0;
cyc(0,P<<1,P<<1);
cyc(1,P<<1|1,P<<1|1);
for(int i=0;i<(N<<1);i++){
dfs(0,i);
dfs(1,i);
}
for(int i=0;i<Q;i++){
int ans = 0;
for(int j=0;j<N;j++){
int temp = 0;
int try1 = dist[0][j<<1];
int try2 = dist[1][j<<1];
if(try1 >= 0){
if(try1 == G[i]) ans++;
else if(try1 < G[i] && cycle[0][P<<1] > 0){
int Gtemp = G[i];
Gtemp -= try1;
Gtemp %= cycle[0][P<<1];
if(!Gtemp) temp++;
}
}
if(try2 >= 0){
if(try2 == G[i]) ans++;
else if(try2 < G[i] && cycle[1][P<<1|1] > 0){
int Gtemp = G[i];
Gtemp -= try2;
Gtemp %= cycle[1][P<<1|1];
if(!Gtemp) temp++;
}
}
ans += (temp > 0);
}
answer(ans);
}
}
Compilation message
garden.cpp: In function 'void count_routes(int, int, int, int (*)[2], int, int*)':
garden.cpp:78:5: error: 'answer' was not declared in this scope
78 | answer(ans);
| ^~~~~~