先不断将度数小于D的点都删去,再找到剩下的图里最大的连通块即可。

#include<cstdio>
#include<algorithm>
#define N 200010
int n,m,D,x,y,i,g[N],v[N<<1],nxt[N<<1],ed,d[N],h,t,q[N],del[N],ans,fin[N];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void add(int x,int y){d[x]++;v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
void dfs(int x){
if(del[x])return;
del[q[++t]=x]=1;
for(int i=g[x];i;i=nxt[i])dfs(v[i]);
}
int main(){
read(n),read(m),read(D);
while(m--)read(x),read(y),add(x,y),add(y,x);
for(i=h=1;i<=n;i++)if(d[i]<D)del[q[++t]=i]=1;
while(h<=t)for(i=g[x=q[h++]];i;i=nxt[i]){
d[v[i]]--;
if(d[v[i]]<D&&!del[v[i]])del[q[++t]=v[i]]=1;
}
for(i=1;i<=n;i++)if(!del[i]){
t=0,dfs(i);
if(t>ans)for(ans=t,x=1;x<=t;x++)fin[x]=q[x];
}
if(!ans)return puts("NIE"),0;
if(ans>1)std::sort(fin+1,fin+ans+1);
for(printf("%d\n",ans),i=1;i<=ans;i++)printf("%d ",fin[i]);
return 0;
}

  

最新文章

  1. fastcgi是什么?与php-fpm之间是什么关系?
  2. ueditor工具栏更改按钮的默认操作
  3. Delphi DateUtils时间单元
  4. iOS 解决导航栏左右 BarButtonItem偏移位置的问题
  5. DSP using MATLAB 示例Example2.12
  6. android应用锁之获取前台进程包名方法
  7. Shell之数学计算
  8. HDU 1372 Knight Moves【BFS】
  9. 【cheerio】nodejs的抓取页面模块
  10. POJ 1228 Grandpa&#39;s Estate(凸包)
  11. Paros抓包工具
  12. 2 WAN 和1 Evo/3g Routeros PCC 方法负载平衡
  13. WPF_DatePiker控件的禁止输入
  14. 利用Needleman–Wunsch算法进行DNA序列全局比对
  15. 二维码开源库ZBar-实现中文解码
  16. python selenium 模块
  17. 从零开始学安全(十一)●IP地址
  18. WINDOWS NT操作系统的注册表文件
  19. js 中判断变量是数组还是对象,和判断对象是否为空
  20. Flag之2019年立

热门文章

  1. DNS原理及其解析过程【精彩剖析】(转)
  2. [POJ1338]Ugly Numbers
  3. [ruby on rails] 跟我学之(5)显示所有数据
  4. django-cms 代码研究(一)djangocms是什么
  5. Android自定义Dialog
  6. java前三本基础知识总结
  7. Search Range in Binary Search Tree
  8. 【转】Maven最佳实践:划分模块
  9. 在64位的linux上运行32位的程序
  10. codeforces 476C.Dreamoon and Sums 解题报告