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

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

\(\\\)


给定一张 \(N\ (\ N\equiv 0\pmod{3}\ )\) 个节点,,\(M\)条边的图,并且保证该图存在一个大小至少为\(\frac{2}{3}N\)的团,以包含节点编号的形式输出该图的任意一个大小为\(\frac N 3\)的团。

  • \(N\in [3,3\times 10^3]\)\(M\in [\frac{\frac{2}{3}N\times (\frac{2}{3}N-1)}{2},\frac{N(N-1)}{2}]\)

\(\\\)

\(Solution\)


  • 脑洞题。反图贪心的做法是可行的,这里写一个不知道神仙出题人怎么想的更简单的做法。

  • 注意到图中最大团大小\(\ge\frac{2}{3}N\),也就是说不在团内的点数\(\le\frac{N}{3}\),注意到属于同一个团的两个点一定满足两点有连边,换句话说,没有边相连的点对一定不属于同一个团。

  • 而不属于最大团的点最多只有\(\frac{N}{3}\)个,所以枚举到的没有连边的点对最多只有这么多个(枚举到的点对直接除掉,不再用于判断其他点),枚举到的点最多只有\(\frac{2}{3}N\)个。去掉这些被枚举到的点,剩下的点最少也有\(\frac{N}{3}\)个,足够构成答案。

\(\\\)

\(Code\)


#include
#include
#include
#include
#include
#include
#include
#define N 3010#define R register#define gc getcharusing namespace std; int n,m;bool edge[N][N],v[N]; inline int rd(){ int x=0; bool f=0; char c=gc(); while(!isdigit(c)){if(c=='-')f=1;c=gc();} while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();} return f?-x:x;} int main(){ n=rd(); m=rd(); for(R int i=1,u,v;i<=m;++i){ u=rd(); v=rd(); edge[u][v]=edge[v][u]=1; } for(R int i=1;i<=n;++i) if(!v[i]){ for(R int j=i+1;j<=n;++j) if(!v[j]&&!edge[i][j]){v[i]=v[j]=1;break;} } for(R int i=1,cnt=0;i<=n;++i) if(!v[i]){printf("%d ",i);if(++cnt==n/3)break;} return 0;}

转载于:https://www.cnblogs.com/SGCollin/p/9674444.html

你可能感兴趣的文章
HBase核心知识点总结
查看>>
Django RESTFramework——更新数据 (5)
查看>>
iOS目录解析 彻底搞懂iOS App的目录结构
查看>>
深入浅出JDK动态代理(二)
查看>>
前端实现获取浏览器flash版本号
查看>>
Hybrid小技巧:通过js调用原生对话框(Android)
查看>>
日志服务Python消费组实战(二):实时分发数据
查看>>
从几道面试题看对象的初始化
查看>>
盛极而衰,互联网体育是伪风口还是真趋势?
查看>>
14-《ARKit by Tutorials》读书笔记1:开始入门
查看>>
[MetalKit]33-Ambient-Occlusion-in-Metal环境光遮蔽
查看>>
图解JavaScript算法排序
查看>>
Flask环境搭建(自己学习用)
查看>>
iOS逆向之旅(进阶篇) — HOOK(Method Swizzling)
查看>>
Javascript之正则表达式的学习笔记
查看>>
Hadoop 学习系列(三)之 YARN 详细解析
查看>>
QPM 之悬浮窗助力性能优化
查看>>
YYCache 源码学习(一):YYMemoryCache
查看>>
ios 原生骨架动画库
查看>>
前端性能优化常用总结
查看>>