Description

Input

第一行包括两个整数N,M。
接下来M行每行两个整数u,v,代表存在一条里连接 u,v的无向边。可能存在重边自环。

Output

降序输出所有不为0的F(i) 。保留6位小数输出。

Sample Input

输入1:

5 5
1 2
2 5
3 4
4 5
3 5

输入2:

5 4
1 2
2 5
5 4
4 3

Sample Output

输出1:

3.000000
2.000000

输出2:

2.800000
2.200000

Data Constraint

对于20%的数据,n,m<=100
对于40%的数据,n,m<=5000
另外有20%的数据,保证图为一个连通的简单环,且当且仅当|u-v|=1 ,存在u到v的边。
对于100%的数据,n,m<=500000

Solution

  • 我们可以愉快的发现这种染色很快就会进入一个循环……

  • 听说可以证明循环的次数,可是我不会,就只做个十几二十轮。

  • 用哈希判断一下当前状态出现过没,出现了就说明出现了循环节!

  • 由于 F 数组的是通过取极限得到的,我们只需要保存循环节的答案即可。

  • 统计循环节的答案时要打一下标记就能均摊 O(1)O(1) 计算了。

  • 要注意一下精度问题~~。

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
const int N=500001,mo=1e9+7,M=1e6+1;
int n,m,tot,sum,pos;
int first[N],next[N<<1],en[N<<1];
int a[N],p[M];
long long h[M],b[N],c[N],g[17][N],ans[N];
inline int read()
{int X=0,w=0; char ch=0;while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
inline void insert(int x,int y)
{next[++tot]=first[x];first[x]=tot;en[tot]=y;
}
inline int hash(int x)
{int y=x%M;while(h[y] && h[y]^x) y=(y+1)%M;return y;
}
int main()
{n=read(),m=read();for(int i=1;i<=m;i++){int x=read(),y=read();insert(x,y);insert(y,x);}for(int i=1;i<=n;i++) a[i]=i;for(int j=1,k=1;j<=n*16;j++,k=k+1>n?1:k+1){for(int i=first[k];i;i=next[i]){c[a[en[i]]]+=k-b[en[i]];b[en[i]]=k;a[en[i]]=a[k];}//for(int i=1;i<=n;i++) c[a[i]]++;if(k==n){for(int i=1;i<=n;i++) c[a[i]]+=k-b[i];memset(b,0,sizeof(b));long long key=0;for(int i=1;i<=n;i++) key=(key*10+a[i])%mo;int k=hash(key);if(h[k]){pos=p[k];break;}else{h[k]=key,p[k]=++sum;memcpy(g[sum],c,sizeof(g[sum]));}}}for(int i=1;i<=n;i++) b[i]=c[i]-g[pos][i];tot=0;double num=1.0/(1.0*n*(sum-pos+1)),ext=1e-6;for(int i=1;i<=n;i++)if(b[i]>=ext) ans[++tot]=b[i];sort(ans+1,ans+1+tot);for(int i=tot;i;i--) printf("%.6lf\n",1.0*ans[i]*num);return 0;
}

JZOJ 5490. 【清华集训2017模拟11.28】图染色相关推荐

  1. JZOJ 5489. 【清华集训2017模拟11.28】海明距离

    Description 设有一长度为n的初始每个位置均为0的序列A.再给定一个长度为n的01序列B. 有Q个特殊的区间[li,ri],你可以选择将A中li到ri这些位置都变为1,当然你可以选择不变. ...

  2. JZOJ 5484. 【清华集训2017模拟11.26】快乐树

    Description 一棵树有n个节点,编号为0到n-1.有一条叫Owaski的狗在树上面走,每一次它可以从一个顶点走到它的任何一个相邻顶点.每个顶点有个可正可负的快乐度,Owaski也有一个快乐度 ...

  3. JZOJ 5483. 【清华集训2017模拟11.26】简单路径

    Description 给定一棵带边权的树,选择两条没有公共边的简单路径(长度可以为0),使得所有在任意一条路径上的边的异或和尽量大. Input 第一行一个数n表示点数,点的编号是0到n-1. 接下 ...

  4. jzoj5498 【清华集训2017模拟12.10】大佬的难题 巧妙容斥

    分治容斥都想了,但想不出正解.. 先说60分的吧 先排序a,然后在b,c上分治. 我们将b两边归并的同时,用数据结构维护b比当前小的c都在哪些地方. 这样就是n log2 n 再说说正解 记a[x] ...

  5. JZOJ5498. 【清华集训2017模拟12.10】大佬的难题

    Sample Input Sample Input1: 4 201334450 1474105774 350932494 Sample Input2: 97670 1734691087 7596883 ...

  6. [JZOJ5498]【清华集训2017模拟12.10】大佬的难题

    Description 给出三个1~n的排列a,b,c 求 ∑1≤i,j≤n[ai<aj][bi<bj][ci<cj] \sum\limits_{1\leq i,j\leq n}[a ...

  7. 【清华集训2017模拟】Catalan

    Description 求Cnmod3814697265625(518)C_n \mod 3814697265625(5^{18})其中CnC_n为卡特兰数第n项 n<=10^18,T<= ...

  8. [LOJ#2329]「清华集训 2017」我的生命已如风中残烛

    [LOJ#2329]「清华集训 2017」我的生命已如风中残烛 试题描述 九条可怜是一个贪玩的女孩子. 这天她在一堵墙钉了 \(n\) 个钉子,第 \(i\) 个钉子的坐标是 \((x_i,y_i)\ ...

  9. Loj #2324. 「清华集训 2017」小 Y 和二叉树

    Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...

最新文章

  1. Activity的知识
  2. Thymeleaf——使用模板动态生成JavaScript脚本文件
  3. Qt文档阅读笔记-写一个简单的单元测试
  4. java中factory_Java后台面试--Spring中FactoryBean与BeanFactory的使用及区别
  5. ThinkPHP实现注册功能
  6. ubuntu搜狗拼音输入法选词框乱码
  7. window下内网远程控制工具
  8. DDR3内存频率标识对应
  9. 2.3.4nbsp;《孙子兵法》的基本原则
  10. NLP,能辅助法官判案吗? | CCF C³
  11. Hilt Test 短篇:插入辅助测试,插这插那,操家伙,看飞刀。——对面那位接着:memory 做的 *……()……*
  12. 强力推荐90个优秀外国英文网站
  13. xenserver 备份和还原
  14. react项目中实现打印预览功能
  15. python手机触屏代码_JS移动客户端--触屏滑动事件及js手机拖拽效果
  16. http://www.dewen.net.cn/q/16042/jquery fadeIn和fadeOut问题
  17. python的数据类型包括内置的_python基础(三)-数据类型与内置方法1
  18. java定时数据同步_java 定时同步数据的任务优化
  19. 程序员发展路线及特定书籍推荐-摘自图灵社区
  20. 自动驾驶感知——激光雷达物体检测算法

热门文章

  1. 40岁后学编程(1)
  2. Linux /dev目录详解和Linux系统各个目录的作用
  3. Sublime Text2使用ctex
  4. Fill in blank -Thermal experiment theory and technology2018-01-06
  5. [我的1024开源程序]30元写的广义误差分布函数
  6. java获取异常的数据_Java(8题):异常,通过try catch进行处理,登录,商品,使用jdbc进行读取,详细图析...
  7. python怎么输出结果_python中打印输出date信息
  8. Qt修炼手册3_VS建立的Qt工程(或项目)生成pro文件
  9. VTK修炼之道60:体绘制_体绘制管线图形渲染管线
  10. [OS复习]操作系统综述1