题目传送门:https://www.luogu.org/problemnew/show/P3524
大意:给一个$N$个点的图,其中一定有一个大小为$\frac{2}{3}N$的团,程序需给出一个大小为$\frac{N}{3}$的团。$N \leq 3000,N \% 3 = 0$
所以这道题还是比较水?
考虑将没有连边的两个点同时删去,那么最坏情况是每一次删除团内一个点被误删,那么最多有$\frac{N}{3}$个点被误删,剩下的最少$\frac{N}{3}$个点就是留下的团了
1 #include<bits/stdc++.h>
2 #define MAXN 3010
3 using namespace std;
4 bool vis[MAXN] , hEd[MAXN][MAXN];
5 int main(){
6 ios::sync_with_stdio(0);
7 cin.tie(0);
8 cout.tie(0);
9 int N , M;
10 cin >> N >> M;
11 for(int i = 1 ; i <= M ; i++){
12 int a , b;
13 cin >> a >> b;
14 hEd[a][b] = hEd[b][a] = 1;
15 }
16 int cnt = 0;
17 for(int i = 1 ; i <= N && cnt < N / 3 ; i++){
18 if(vis[i])
19 continue;
20 bool f = 1;
21 for(int j = i + 1 ; f && j <= N ; j++)
22 if(!vis[j] && !hEd[i][j]){
23 vis[i] = vis[j] = 1;
24 f = 0;
25 }
26 if(f){
27 cnt++;
28 cout << i << ' ';
29 }
30 }
31 return 0;
32 }