这题就是坑人的,因为way我前一半存正图,后一半存反图,导致一般扩大两倍过不了,而是要扩大四倍,就是这个坑!!!!!

 #include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=4e6+;
struct node
{
int val;
int next;
}way[maxn];
queue< int >q;
int n,m;
bool vis[],cover[];
int nex[];
int cnt,head[];
int last[];
int s[],ans;
int tot=;
int add(int x,int y)
{
way[++tot].next=head[x];
way[tot].val=y;
head[x]=tot;
}
void de(int x)
{
nex[last[x]]=nex[x];
last[nex[x]]=last[x];
}
int main()
{
cin>>n>>m;
int x,y;
for(int i=;i<=m;i++)
{
cin>>x>>y;
add(x,y);
add(y,x);
}
//cout<<tot<<endl;
nex[]=;
for(int i=;i<n;i++)
{
last[i+]=i;
nex[i]=i+;
} for(int i=;i<=n;i++)
{
if(!vis[i])
{
s[++ans]=;
vis[i]=true;
q.push(i);
de(i);
// cout<<1111111<<endl;
while(!q.empty())
{
int x=q.front();
q.pop();
for(int j=head[x];j;j=way[j].next)
{
if(!vis[way[j].val])
{
cover[way[j].val]=true;
}
}
for(int j=nex[];j;j=nex[j])
{
if(!cover[j])
{
vis[j]=true;
s[ans]++;
de(j);
q.push(j);
}
else
cover[j]=false;
}
}
}
}
//cout<<1111111<<endl;
sort(s+,s++ans);
cout<<ans<<endl;
for(int i=;i<=ans;i++)
{
cout<<s[i]<<" ";
}
/*cout<<endl<<endl;
for(int i=1;i<=n;i++)
{
cout<<nex[i]<<" ";
}*/
return ;
}

最新文章

  1. 无法删除对象 &#39;产品&#39;,因为该对象正由一个 FOREIGN KEY 约束引用。
  2. Possion 分布
  3. SQL2014内存表性能之内存中 OLTP 的性能改进测试
  4. 实战:ADFS3.0单点登录系列-总览
  5. azure git 托管
  6. c# 语法5.0 新特性 转自网络
  7. [Ecmall]ECMALL目录结构设置与数据库表
  8. Android----paint触摸轨迹监听
  9. 记录eclipse安装SpringBoot插件及搭建SpringBoot项目
  10. 如何改变checkbox的样式
  11. Centos 7 配置邮件发送
  12. Qt__绘制系统
  13. C语音,关于可变参数的宏定义
  14. Go实现Pow工作量证明
  15. Java——并发编程
  16. java springboot+maven发送邮件
  17. 如鹏网学习笔记(八)CSS
  18. Thymeleaf教程【转】
  19. 菜鸟从零学编程——GET与POST
  20. thinkphp5集成微信支付【公众号支付】快捷路径

热门文章

  1. 【WPF】EntityframeworkCore NLog出力设置
  2. Linux-rhel-server-7.4-Mysql-5.7安装记录
  3. 直通BAT面试题库锦集
  4. CSDN VIP如何添加引流自定义栏目
  5. Maya零基础新手入门教程第一部分:界面
  6. vue事件获取当前对象
  7. Vbox中unbuntu15.10与win10共享文件 及开启复制粘贴功能
  8. iOS开发请您把握现在 — 面向未来学习
  9. 一个关于内联优化和调用约定的Bug
  10. c使用二叉链表创建二叉树遇到的一些疑问和思考