博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2530 [POI2011]Party
阅读量:6466 次
发布时间:2019-06-23

本文共 916 字,大约阅读时间需要 3 分钟。

给定一张 \(n\) (保证 \(n\)\(3\) 的倍数)个节点 \(m\) 条边的图,并且保证该图存在一个大小至少为 \(\frac{2}{3}n\) 的团。请输出该图的任意一个大小为 \(\frac{1}{3}n\)的团。

\(n\leq3000,\ m\leq n^2\)

贪心


神仙题一道……

结论:把所有不相邻的节点判掉,输出剩下的节点

若两点都不在团中,显然直接判掉;若其中一点在团中,判掉会失去一个答案节点。由于有至少 \(\frac{2}{3}n\) 个点两两相邻,因此最多只会执行 \(\frac{1}{3}n\) 次判点操作,于是就至少会留下 \(\frac{1}{3}n\) 个点,输出即可

时间复杂度 \(O(n^2)\)

代码

#include 
using namespace std;const int maxn = 3010;int n, m, flg[maxn], a[maxn][maxn];int main() { scanf("%d %d", &n, &m); for (int i = 1; i <= m; i++) { int u, v; scanf("%d %d", &u, &v); a[u][v] = a[v][u] = 1; } for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n && !flg[i]; j++) { if (!a[i][j] && !flg[j]) { flg[i] = flg[j] = 1; } } } int cnt = 0; for (int i = 1; i <= n; i++) { if (!flg[i]) { if (++cnt > n / 3) break; printf("%d ", i); } } return 0;}

转载于:https://www.cnblogs.com/Juanzhang/p/10883748.html

你可能感兴趣的文章
简单的导出表格和将表格下载到桌面上。
查看>>
《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立
查看>>
查询指定名称的文件
查看>>
Python 嵌套列表解析
查看>>
[GXOI/GZOI2019]旧词——树链剖分+线段树
查看>>
anroid 广播
查看>>
AJAX POST&跨域 解决方案 - CORS
查看>>
开篇,博客的申请理由
查看>>
Servlet 技术全总结 (已完成,不定期增加内容)
查看>>
[JSOI2008]星球大战starwar BZOJ1015
查看>>
centos 7 部署LDAP服务
查看>>
揭秘马云帝国内幕:马云的野心有多大
查看>>
iOS项目分层
查看>>
一个action读取另一个action里的session
查看>>
IntelliJ IDEA 注册码
查看>>
String字符串的截取
查看>>
DynamoDB Local for Desktop Development
查看>>
用javascript验证哥德巴赫猜想
查看>>
Shell编程-环境变量配置文件
查看>>
[Unity3d]DrawCall优化手记
查看>>