<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      最裸的點分治+fft,調了好久,太菜了。。。。

      #include<iostream>
      #include<cstring>
      #include<cstdio>
      #include<cmath>
      #include<algorithm>
      using namespace std;
      typedef long long ll;
      const int maxn=200010,inf=1e9;
      const double pi=acos(-1);
      int f[maxn],t,last[maxn],pre[maxn],other[maxn],siz[maxn],vis[maxn];
      int mi,root,rev[maxn],dep,N,n,p[maxn],tot,is[maxn];
      ll sum[maxn],c[maxn],cnt[maxn];
      void add(int x,int y){++t;pre[t]=last[x];last[x]=t;other[t]=y;}
      void getroot(int x,int fa,int ac){
          f[x]=0;
          for(int i=last[x];i;i=pre[i]){
              int v=other[i];
              if(vis[v]||v==fa)continue;
              getroot(v,x,ac);
              f[x]=max(f[x],siz[v]);
          }
          f[x]=max(siz[ac]-siz[x],f[x]);//注意這里是siz[ac]而不是n; 
          if(f[x]<mi){mi=f[x];root=x;}
      }
      void dfs(int x,int fa,int d){
          c[d]++;
          for(int i=last[x];i;i=pre[i]){
              int v=other[i];
              if(vis[v]||v==fa)continue;
              dfs(v,x,d+1);
          }
      }
      struct cp{
          double r,i;
          cp operator+(cp&t){cp tp;tp.r=r+t.r;tp.i=i+t.i;return tp;}
          cp operator-(cp&t){cp tp;tp.r=r-t.r;tp.i=i-t.i;return tp;}
          cp operator*(cp&t){cp tp;tp.r=r*t.r-i*t.i;tp.i=t.r*i+t.i*r;return tp;}    
      }A[maxn],B[maxn],tmp[maxn],wn,w,x,y;
      void fft(cp a[],int n,int flag){
          for(int i=0;i<n;++i){
              rev[i]=rev[i>>1]>>1;
              if(i&1)rev[i]|=(n>>1);
          }
          for(int i=0;i<n;++i)tmp[i]=a[rev[i]];
          for(int i=0;i<n;++i)a[i]=tmp[i];
          for(int i=2;i<=n;i<<=1){
              wn.r=cos(2*pi/i);wn.i=flag*sin(2*pi/i);
              for(int j=0;j<n;j+=i){
                  w.r=1;w.i=0;
                  for(int k=j;k<j+i/2;++k){
                      x=a[k];y=a[k+i/2]*w;
                      a[k]=x+y;a[k+i/2]=x-y;
                      w=w*wn;
                  }
              }
          }
          if(flag==-1)for(int i=0;i<n;++i)a[i].r/=n;
      }
      void Siz(int x,int fa){
          siz[x]=1;
          for(int i=last[x];i;i=pre[i]){
              int v=other[i];
              if(v==fa||vis[v])continue;
              Siz(v,x);
              siz[x]+=siz[v];
          }
      }
      void calc(ll a[],int n,int flag){
          for(int i=0;i<n;++i)A[i].r=a[i],A[i].i=0;
          for(int i=0;i<n;++i)B[i].r=a[i],B[i].i=0;
          fft(A,n,1);
          fft(B,n,1);
          for(int i=0;i<n;++i)A[i]=A[i]*B[i];
          fft(A,n,-1);
          for(int i=0;i<n;++i)sum[i]+=flag*(ll)(A[i].r+0.3);
      }
      void solve(int x){
          mi=1e9;
          ll res=0;
          Siz(x,0);
          for(N=1;N<=siz[x];N<<=1);
          for(int i=0;i<N;++i)cnt[i]=0;
          cnt[0]=1;
          for(int i=last[x];i;i=pre[i]){
              int v=other[i];
              if(vis[v])continue;
              for(N=1;N<=2*siz[v];N<<=1);
              for(int j=0;j<N;++j)c[j]=0;
              dfs(v,x,1);
              calc(c,N,-1);
              for(int j=0;j<N;++j)cnt[j]+=c[j];
          }
          for(N=1;N<=siz[x];N<<=1);
          calc(cnt,N,1);
          /*for(int i=0;i<n;++i)cout<<A[i].r<<' ';
          cout<<endl;*/
          sum[0]=0;
      }
      void divont(int x){
          mi=1e9;
          Siz(x,0);
          getroot(x,0,x);
          int u=root;
          //cout<<u<<endl;
          solve(u);
          vis[u]=1;
          for(int i=last[u];i;i=pre[i]){
              int v=other[i];
              if(!vis[v])divont(v);
          }
      }
      int main(){
          cin>>n;
          int x,y;
          for(int i=1;i<n;++i){
              scanf("%d%d",&x,&y);
              add(x,y);add(y,x);
          }
          divont(1);
          for(int i=2;i<=50010;++i){
              if(!is[i]){p[++tot]=i;}
              for(int j=1;j<=tot&&i*p[j]<=50010;++j){
                  is[i*p[j]]=1;
                  if(i%p[j]==0)break;
              }
          }
          double mu=(double)n*(n-1)/2,res=0;
          for(int i=1;i<=tot&&p[i]<=n;++i){
              res+=sum[p[i]];
          }
          res/=2;
          printf("%.7lf",double(res)/double(mu));
          return 0;
      } 

       

      posted on 2018-03-17 18:12  湮滅之瞳  閱讀(123)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国产成人啪精品午夜网站| 熟女人妻aⅴ一区二区三区电影| 人妻av无码系列一区二区三区| 国产精品一二三中文字幕| 成人国产精品免费网站| 麻豆aⅴ精品无码一区二区| 国产精品蜜臀av在线一区| 中文字幕日韩国产精品| 武定县| 九月婷婷人人澡人人添人人爽| 国产精品久久久尹人香蕉| 国产久免费热视频在线观看| 九九热免费公开视频在线| 久久亚洲2019中文字幕| 新余市| 久久精产国品一二三产品| 免费播放一区二区三区| 保康县| 欧美一区二区三区欧美日韩亚洲| 午夜福利国产精品视频| 亚洲国产精品一二三四区| 亚洲国产韩国欧美在线| 国产精品青草久久久久福利99| 自拍视频一区二区三区四区| 丰满岳乱妇三级高清| 国产午夜精品福利视频| 国产精品无遮挡一区二区| jk白丝喷浆| 国产一区二三区日韩精品| 影音先锋啪啪av资源网站| 草草线在成年免费视频2| 成人午夜电影福利免费| 一二三三免费观看视频| 热99久久这里只有精品| 久久亚洲人成网站| 99久久国产一区二区三区| 国产精品国产三级国快看| 好紧好湿太硬了我太爽了视频| 加勒比无码人妻东京热| 国内自拍视频在线一区| 国产午夜成人久久无码一区二区|