Submission #24879

#TimeUsernameProblemLanguageResultExecution timeMemory
24879HiasatTropical Garden (IOI11_garden)C++14
69 / 100
243 ms60576 KiB
#include "garden.h" #include "gardenlib.h" #include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; const int MX = 500001; vector<int> adj[MX], g[MX * 2]; int need[MX * 2][2]; void connect(int u , int v, int N) { if (adj[u][0] == v || adj[u][0] == v - N) u = u + N; g[u].push_back(v); } void dfs(int u , int cost, int it) { if (need[u][it] != -1) return; if (cost) need[u][it] = cost; for (int i = 0; i < g[u].size(); ++i) { dfs(g[u][i], cost + 1, it); } } void count_routes(int N, int M, int P, int R[][2], int Q, int G[]) { memset(need, -1, sizeof need); for (int i = 0; i < M; ++i) { adj[R[i][0]].push_back(R[i][1]); adj[R[i][1]].push_back(R[i][0]); } for (int i = 0; i < N; ++i) { while (adj[i].size() > 2) adj[i].pop_back(); if (adj[i].size()) connect(adj[i][0], i, N); if (adj[i].size()) { if (adj[i].size() == 2) { connect(adj[i][1], i + N, N); } else { connect(adj[i][0], i + N, N); } } } dfs(P, 0, 0); dfs(P + N, 0, 1); for (int p = 0 ; p < Q ; p++) { int res = 0; for (int i = 0; i < N; ++i) { for (int it = 0 ; it < 2 ; it++) { int rem = G[p]; if(rem < need[i][it]) continue; if(need[i][it] == -1) continue; rem -= need[i][it]; if(rem == 0 || (need[P+it*N][it] != -1 && rem%need[P+it*N][it] == 0)){ res++; } } } answer(res); } }

Compilation message (stderr)

garden.cpp: In function 'void dfs(int, int, int)':
garden.cpp:25:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < g[u].size(); ++i) {
                  ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...