Luogu3524 POI2011 Party 图论、构造

本文解析洛谷P3524题目,介绍一种寻找图中团的有效算法。面对N个点的图,其中存在大小为2/3N的团,文章提出通过删除未连接边的点对策略,最终确定至少N/3大小的团。算法通过逐次检查点对,若两点间无边则同时标记删除,确保剩余点集构成所需团。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目传送门: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 }

 

转载于:https://www.cnblogs.com/Itst/p/9755467.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值