1.聪聪可可

点分治板子

然而想那个 t1[1]*t1[2]*2+t1[0]*t1[0]想了好久

就是最基本的组合方法 毕竟(2,5)和(5,2)可是要算两次的

画画图就好了

(不要像我一样盯着大佬们的显然可得懵逼23333)

 #include<iostream>
 #include<cstdio>
 #include<cstdlib>
 #include<algorithm>
 #define maxn 40000
 using namespace std;
 struct eg
 {
     int to,v,nxt;
 }b[maxn];
 ,f[maxn],sz[maxn],vis[maxn],d[maxn]={},ans,root,sum,t1[];
 int gcd(int x,int y){return y?gcd(y,x%y):x;}
 void link(int x,int y,int z)
 {
     b[++tot].nxt=head[x];
     b[tot].to=y;
     b[tot].v=z;
     head[x]=tot;
 }
 void getroot(int u,int fa)
 {
     sz[u]=,f[u]=;
     for (int i=head[u];i;i=b[i].nxt)
     {
         int t=b[i].to;
         if (vis[t]||t==fa) continue;
         getroot(t,u);
         sz[u]+=sz[t];
         f[u]=max(f[u],sz[t]);
     }
     f[u]=max(f[u],sum-sz[u]);
     if (f[root]>f[u]) root=u;
 }
 void getdeep(int x,int fa)
 {
     t1[d[x]]++;
     for (int i=head[x];i;i=b[i].nxt)
     {
         int t=b[i].to;
         if (vis[t]||t==fa) continue;
         d[t]=(d[x]+b[i].v)%;
         getdeep(t,x);
     }
 }
 int cal(int x,int vv)
 {
     d[x]=vv%;
     t1[]=t1[]=t1[]=;
     getdeep(x,);
     ]*t1[]*+t1[]*t1[];
 }
 void work(int x)
 {
     ans+=cal(x,);
     vis[x]=;
     for (int i=head[x];i;i=b[i].nxt)
     {
         int t=b[i].to;
         if (vis[t]) continue;
         ans-=cal(t,b[i].v);
         sum=sz[t];
         root=;
         getroot(t,);
         work(root);
     }
 }
 int main()
 {
     int n;
     scanf ("%d",&n);
     ;i<n;++i)
     {
         int x,y,w;
         scanf ("%d%d%d",&x,&y,&w);
         link(x,y,w);
         link(y,x,w);
     }
     root=;f[]=n,sum=n;
     getroot(,);
     work(root);
     int l=gcd(ans,n*n);
     cout<<(ans/l)<<"/"<<(n*n/l);
     ;
 }

2.POJ1741 树上的点对

考试的时候碰到这题 感觉就像bilegou

然后我这个天大的sb就发挥我的本性打了个链剖哈哈哈哈哈哈哈哈 还没打完

考完之后老师说正解是点分治 然而考前我们是没有学过这玩意儿的(和善

去学了一下 只感觉dalao的论文写的真好

 #include<iostream>
 #include<cstdlib>
 #include<cstdio>
 #include<algorithm>
 #include<cstring>
 #define maxn 20010
 using namespace std;
 ,dep[maxn],sz[maxn],f[maxn],vis[maxn],d[maxn];
 int sum,root,n,k,ans;
 void link(int x,int y,int z)
 {
     nxt[++tot]=head[x];
     to[tot]=y;
     dis[tot]=z;
     head[x]=tot;
 }
 void gr(int x,int fa)
 {
     sz[x]=;f[x]=;
     for (int i=head[x];i;i=nxt[i])
     {
         int t=to[i];
         if (t==fa||vis[t]) continue;
         gr(t,x);
         sz[x]+=sz[t];
         f[x]=max(f[x],sz[t]);
     }
     f[x]=max(f[x],sum-sz[x]);
     if (f[root]>f[x]) root=x;
 }
 void gd(int x,int fa)
 {
     dep[++dep[]]=d[x];
     for (int i=head[x];i;i=nxt[i])
     {
         int t=to[i];
         if (t==fa||vis[t]) continue;
         d[t]=d[x]+dis[i];
         gd(t,x);
     }
 }
 int work(int x,int v)
 {
     d[x]=v;dep[]=;
     gd(x,);
     sort(dep+,dep+dep[]+);
     ;
     ,r=dep[];l<r;)
     {
         if (dep[l]+dep[r]<=k) ans+=r-l,l++;
         else r--;
     }
     return ans;
 }
 void dfs(int u)
 {
     ans+=work(u,);
     vis[u]=;
     for (int i=head[u];i;i=nxt[i])
     {
         int t=to[i];
         if (vis[t]) continue;
         ans-=work(t,dis[i]);
         sum=sz[t];
         root=;
         gr(t,);
         dfs(root);
     }
 }
 int main()
 {
     //freopen ("in.txt","r",stdin);
     //freopen ("out.txt","w",stdout);
     while (scanf ("%d%d",&n,&k))
     {
         memset(vis,,sizeof(vis));
         memset(head,,sizeof(head));
         root=,ans=,tot=;
         ) break;
         ;i<n;++i)
         {
             int x,y,z;
             scanf ("%d%d%d",&x,&y,&z);
             link(x,y,z);
             link(y,x,z);
         }
         sum=n,f[]=0x7fffffff;
         gr(,);
         dfs(root);
         cout<<ans<<endl;
     }
     ;
 }

点分治X2的更多相关文章

  1. 【教程】简易CDQ分治教程&学习笔记

    前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦!       CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...

  2. BZOJ 1176 [Balkan2007]Mokia ——CDQ分治

    [题目分析] 同BZOJ2683,只需要提前处理s对结果的影响即可. CDQ的思路还是很清晰的. 排序解决一维, 分治时间, 树状数组解决一维. 复杂度是两个log [代码] #include < ...

  3. 初识CDQ分治

    [BZOJ 1176:单点修改,查询子矩阵和]: 1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 200 ...

  4. BNUOJ 51279[组队活动 Large](cdq分治+FFT)

    传送门 大意:ACM校队一共有n名队员,从1到n标号,现在n名队员要组成若干支队伍,每支队伍至多有m名队员,求一共有多少种不同的组队方案.两个组队方案被视为不同的,当且仅当存在至少一名队员在两种方案中 ...

  5. 【BZOJ-4456】旅行者 分治 + 最短路

    4456: [Zjoi2016]旅行者 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 254  Solved: 162[Submit][Status] ...

  6. 【BZOJ-1176&2683】Mokia&简单题 CDQ分治

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 821[Submit][St ...

  7. NOI题库分治算法刷题记录

    今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...

  8. Bzoj2683 简单题 [CDQ分治]

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

  9. 初学CDQ分治-NEU1702

    关于CDQ分治,首先需要明白分治的复杂度. T(n) = 2T(n/2)+O(kn), T(n) = O(knlogn) T(n) = 2T(n/2)+O(knlogn), T(n) = O(knlo ...

随机推荐

  1. 安卓自定义控件(二)BitmapShader、ShapeDrawable、Shape

    第一篇博客中,我已经Canvas.Paint.Shader.Xfermode这些对象做了总结,而现在这篇文章主要介绍BitmapShader位图渲染,Xfermode如何实际应用,还有形状的绘制.不过 ...

  2. C/S架构自动化测试入门

    所谓C/S架构即Client/Server(客户端/服务器架构).虽然近年来C/S架构产品越来越少,大有被B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但C/S还是有B/S不可 ...

  3. eclipse中 web项目缺少tomcatl lib的解决办法

    1.最近在搭建的项目中,将项目导入eclipse中突然报好多错误,查看后全是丢失tomcat的lib包的错误,莫名其妙的错误. 代码中缺少的也是这样的问题 很明显,我之前的包丢了,莫名其妙的丢了. 解 ...

  4. 对java多线程里Synchronized的思考

    Synchronized这个关键字在多线程里经常会出现,哪怕做到架构师级别了,在考虑并发分流时,也经常会用到它.在本文里,将通过一些代码实验来验证它究竟是"锁"什么. 在启动多个线 ...

  5. Cannot load browser "PhantomJS": it is not registered! Perhaps you are missing some plugin? 测试安装遇到的BUG

    安装了半天phantomjs就是安装不好,后面想了个死办法,http://phantomjs.org/download.html这个网址下先去下载好 phantomjs-2.1.1-windows.z ...

  6. 利用阿里云Centos7建站过程

    以下可能不尽详述,如有问题欢迎指出 准备过程:1. 阿里云主机一台2.域名一个 3.github个人帐号开始: 1.以root帐号登录云主机 2.安装apache [root@192 ~]# yum ...

  7. 魔术常量(Magic constants)

    魔术常量(Magic constants) PHP中的常量大部分都是不变的,但是有8个常量会随着他们所在代码位置的变化而变化,这8个常量被称为魔术常量. __LINE__,文件中的当前行号 __FIL ...

  8. 项目实战11—企业级nosql数据库应用与实战-redis的主从和集群

    企业级nosql数据库应用与实战-redis 环境背景:随着互联网2.0时代的发展,越来越多的公司更加注重用户体验和互动,这些公司的平台上会出现越来越多方便用户操作和选择的新功能,如优惠券发放.抢红包 ...

  9. pymysql实现MySQL与Python交互

    常见MySQL操作 所需模块: pip3 install pymysql 查询(fetchone,fetchmany,fetchall): import pymysql #连接 con = pymys ...

  10. mybatis中使用if标签比较两个字符串是否相等

    <!-- 此处使用if比较是否相等 --> 范例一: <select id="findClientIds" parameterType="map&quo ...