聚会
来源:互联网 发布:淘宝客服三班倒时间 编辑:程序博客网 时间:2024/04/30 08:00
把直接认识的人小于d的人删去,然后染色,找最大值就可以了。
一开始删点时,将已经删过的点重复入队,把它的临接点的du多次重复地减,导致出错。
#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<cstdio>#define N 200009using namespace std;int n,m,d;int head[N],nxt[2*N],to[2*N],du[N],tot,q[10*N],l,r;int color[N],color_num,cnt[N];bool f[N];void add(int x,int y){ to[++tot]=y; nxt[tot]=head[x]; head[x]=tot;}void dfs(int x){ color[x]=color_num; f[x]=1; for(int i=head[x];i;i=nxt[i]) { if(du[to[i]]>=d&&!color[to[i]]) { dfs(to[i]); } }}int main(){ scanf("%d%d%d",&n,&m,&d); for(int i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); add(a,b),add(b,a); du[a]++;du[b]++; } for(int i=1;i<=n;i++) if(du[i]<d) q[++r]=i,f[i]=1; while(l<=r) { int x=q[++l]; for(int i=head[x];i;i=nxt[i]) { du[to[i]]--; if(du[to[i]]<d&&!f[to[i]]) q[++r]=to[i],f[to[i]]=1;//f数组做标记!! } } for(int i=1;i<=n;i++) { if(!color[i]&&!f[i]) ++color_num,dfs(i); } for(int i=1;i<=n;i++) cnt[color[i]]++; int maxn=0,C; for(int i=1;i<=color_num;i++) maxn=max(maxn,cnt[i]); printf("%d\n",maxn); for(int i=1;i<=n;i++) if(cnt[color[i]]==maxn) { C=color[i]; break; } for(int i=1;i<=n;i++) if(color[i]==C) printf("%d ",i); return 0;}
阅读全文
1 0
- 聚会
- 聚会
- 聚会
- 聚会
- 聚会
- 聚会聚会
- 老朋友聚会
- 美女------聚会
- 首次聚会
- 聚会通知
- 聚会费用
- 再聚会
- 中秋聚会
- 关于聚会
- 技术聚会
- 初中聚会
- 公司聚会
- 聚会问题
- 单点登录
- Android 自定义属性
- java web——servlet+jsp实现前后台交互
- 张小龙详细解读:微信小程序扫描二维码可进入(附实录)
- Union和Union All的区别
- 聚会
- eclipse export jar file 和 runnable jar file 的区别
- SpringMVC+Maven开发最小“自然语言理解”项目攻略(附源码打包下载及详细说明)
- 使用Spring JDBCTemplate简化JDBC的操作(一)
- python 的列表呦 噢力给
- MySQL 检测sql语句性能
- Java/Android中的强引用、软引用、弱引用、虚引用
- Java定时器的cron设置详解
- WebView长按弹出复制粘贴