Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <bits/stdc++.h>using namespace std;int w, h, n;struct Radar{double x, y, r; void read(){cin >> x >> y >> r;} }radar[1001];vector<vector<int>> e;bool isRadarCrossed(int i, int j) {return pow(radar[i].x - radar[j].x, 2) + pow(radar[i].y - radar[j].y, 2) <= pow(radar[i].r + radar[j].r, 2);}vector<bool> vis;bool dfs(int u) {if (radar[u].y + radar[u].r >= h) return true;if (vis[u]) return false;vis[u] = true;for (int v : e[u]) if (dfs(v)) return true;return false;}bool solve() {for (int i = 0; i < n; ++i) if (!vis[i] && radar[i].y - radar[i].r <= 0 && dfs(i)) return true;return false;}int main() {int T; cin >> T; while (T--) {cin >> w >> h >> n;for (int i = 0; i < n; ++i) radar[i].read();e.clear(); e.resize(n);for (int i = 0; i < n; ++i) for (int j = i + 1; j < n; ++j)if (isRadarCrossed(i, j)) e[i].push_back(j), e[j].push_back(i);vis.assign(n, false);cout << (solve() ? "NO" : "YES") << endl;}}