题解 | #ACM Battle#
ACM Battle
https://ac.nowcoder.com/acm/problem/14122
由于数据很弱(20组数据,每组1000个点,2000条边),于是直接暴力解决了。
每次选择度数最大的点,然后用一滴圣水即可。
(呜呜怪不得从来没见过魔法阵呢!)
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 2005; vector<int> g[N]; int d[N]; int t, n, m; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while(t --) { cin >> n >> m; for(int i = 0; i <= 1005; i ++) { g[i].clear(); d[i] = 0; } while(m --) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); d[u] ++; d[v] ++; } int ans = 0; while(ans <= 11) { int maxx = 0, idx; for(int i = 1; i <= n; i ++) { if(d[i] > maxx) { maxx = d[i]; idx = i; } } if(maxx == 0) { break; } d[idx] = 0; for(auto p : g[idx]) { d[p] --; } ans ++; } if(ans >= 11) { cout << "GG\n"; } else { cout << ans << '\n'; } } return 0; }