# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
899044 | josanneo22 | Tropical Garden (IOI11_garden) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define L(i,j,k) for(int i=j;i<=k;i++)
#define R(i,j,k) for(int i=j;i>=k;i--)
int N, M, P, Q;
constexpr int NN = 1005;
vector<pair<int,int>> G[NN];
int who1[NN], who2[NN], pos[NN][105];
void dfs(int u,int f, int trails){
if(trails>=101) return;
pos[u][trails]++;
if(who1[u]==-1) dfs(f, u, trails + 1);
if(f != who1[u]) dfs(who1[u], u, trails + 1);
else if(f != who2[u] && who2[u] != -1) dfs(who2[u], u, trails+1);
else dfs(f, u, trails+1);
}
void count_routes(int _N, int _M, int _P, int _R[][2],int _Q, int _G[]){
N=_N; M=_M; P=_P; Q=_Q;
//find the number of nodes that end at P
L(i,1,N){
who1[u] = who2[u] = -1;
mn1[u] = mn2[u] = 1E9;
memset(pos[i], 0, sizeof(pos[i]));
}
L(i, 0, M-1){
int u=_R[i][0], v=_R[i][1];
G[u].push_back(make_pair(v,i));
G[v].push_back(make_pair(u,i));
}
L(i, 1, N){
for(auto &v:G[u]){
if(v.second < mn1[u]){
mn2[u] = mn1[u];
mn1[u] = v.second;
who2[u] = who1[u];
who1[u] = v.first;
}
else if(v.second<mn2[u]){
mn2[u] = v.second;
who2[u] = v.first;
}
}
}
L(i, 1, N) dfs(i);
long long ans = 0;
L(i, 0, Q - 1){
int u = G[i];
ans += pos[P][u];
}
answer(ans);
}