# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1104553 | 2024-10-24T03:26:55 Z | vjudge1 | 열대 식물원 (Tropical Garden) (IOI11_garden) | C++17 | 0 ms | 0 KB |
#include "garden.h" #include "gardenlib.h" #include<bits/stdc++.h> using namespace std; using pii = pair<int, int>; const int MxN = 1005; int n, m, p, q, g, r[MxN][2], ans; vector<pii> v[MxN]; void dfs (int cur, int dist, int w) { if (dist == g && cur == p) return void(ans++); if (dist >= g) return; bool ok = 0; if (v[cur].size() >= 1 && v[cur][0].first != w) { auto [x, y] = v[cur][0]; dfs(y, dist + 1, x); ok = 1; } if (!ok && v[cur].size() >= 2 && v[cur][1].first != w) { auto [x, y] = v[cur][1]; dfs(y, dist + 1, x); ok = 1; } if (!ok) { auto [x, y] = v[cur][0]; dfs(y, dist + 1, x); } } void count_routes(int N, int M, int P, int R[][2], int Q, int G[]){ n = N; m = M; p = P; q = Q; g = G[0]; for (int i = 0; i < m; i++) { r[i][0] = R[i][0]; r[i][1] = R[i][1]; v[r[i][0]].emplace_back(i, r[i][1]); v[r[i][1]].emplace_back(i, r[i][0]); } for (int i = 0; i < n; i++) sort(v[i].begin(), v[i].end()); for (int i = 0; i < n; i++) dfs(i, 0, -1, {}); answer(ans); }