bzoj3697 采药人的路径

题目描述

题解:

首先我们应该注意,这道题问的是:

对于点对(a,b),存在点c在ab路径上,且a<->c和b<->c都是阴阳平衡的合法点对(a,b)有多少对。

因此这玩意是树链统计。

阴阳平衡就是$1+(-1)=0$;

用点分治搞一搞。

仔细看一看,你很快发现如果a->b和a->b->c相等的话,b<->c一定是阴阳平衡的(废话)。

所以我们将状态分为两种,路径上没有阴阳平衡的,还有路径上没有阴阳平衡的。

所以代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 100050
#define ll long long
inline int rd()
{int f=1,c=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){c=10*c+ch-'0';ch=getchar();}return f*c;
}
int n,hed[N],cnt;
struct EG
{int to,nxt,v;
}e[2*N];
void ae(int f,int t,int v)
{e[++cnt].to = t;e[cnt].nxt = hed[f];e[cnt].v = v;hed[f] = cnt;
}
int w[N],rt,sum,mrk[N];
int siz[N];
ll ans;
void get_rt(int u,int fa)
{w[u] = 0,siz[u] = 1;for(int j=hed[u];j;j=e[j].nxt){int to = e[j].to;if(to==fa||mrk[to])continue;get_rt(to,u);siz[u] += siz[to];if(siz[to]>w[u])w[u]=siz[to];}w[u] = max(w[u],sum-siz[u]);if(w[u]<w[rt])rt=u;
}
ll f[2*N][2],g[2*N][2];
int hs[2*N],max_dep;
void dfs(int u,int fa,int dep)
{max_dep = max(max_dep, (dep-N) * (dep<N?-1:1));if(hs[dep])f[dep][1]++;else f[dep][0]++;hs[dep]++;for(int j=hed[u];j;j=e[j].nxt){int to = e[j].to;if(to==fa||mrk[to])continue;dfs(to,u,dep+e[j].v);}hs[dep]--;
}
void work(int u)
{mrk[u] = 1;g[N][0] = 1;int mxd = 0;for(int j=hed[u];j;j=e[j].nxt){int to = e[j].to;if(mrk[to])continue;max_dep = 0;dfs(to,u,N+e[j].v);mxd = max(max_dep,mxd);ans+=f[N][0]*(g[N][0]-1);for(int i=-max_dep;i<=max_dep;i++)ans+= f[N+i][0]*g[N-i][1]+f[N+i][1]*g[N-i][0]+f[N+i][1]*g[N-i][1];for(int i=N-max_dep;i<=N+max_dep;i++){g[i][0]+=f[i][0];g[i][1]+=f[i][1];f[i][0]=f[i][1]=0;}}for(int i=N-mxd;i<=N+mxd;i++)g[i][0]=g[i][1]=0;int sum0 = sum;for(int j=hed[u];j;j=e[j].nxt){int to = e[j].to;if(mrk[to])continue;rt = 0,sum = (siz[to]>siz[u]?sum0-siz[u]:siz[to]);get_rt(to,0);work(rt);}
}
int main()
{n = rd();for(int f,t,v,i=1;i<n;i++){f = rd(),t = rd(),v = rd();if(!v)v=-1;ae(f,t,v),ae(t,f,v);}w[0]=0x3f3f3f3f;rt = 0,sum = n;get_rt(1,0);work(rt);printf("%lld\n",ans);return 0;
}

 

转载于:https://www.cnblogs.com/LiGuanlin1124/p/10190006.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java输入/输出流体系中常用的流分类

java输入/输出流体系中常用的流分类分类字节输入流字节输出流字符输入流字符输出流抽象基类InputStreamOutputStreamReaderWriter访问文件FileInputStreamFileOutputStreamFileReaderFileWriter访问数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWrit…

Log4j简单记录

### 设置### log4j.rootLogger debug,stdout,D,E### 输出信息到控制抬 ### log4j.appender.stdout org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target System.out log4j.appender.stdout.layout org.apache.log4j.PatternLayout log4j.appender.stdout.layou…

URLConnection和HttpURLConnection类

配置URLConnection 在实际建立连接之前&#xff0c;我们可以配置影响客户端和服务器之间正在进行的通信的各个方面&#xff0c;例如超时&#xff0c;缓存&#xff0c;HTTP请求方法等。 该URLConnection的类提供了配置连接下面的方法&#xff1a; setConnectTimeout&#xff0…

自定义枚举typeHandler

1.定义枚举类 package com.learn.ssm.chapter4.enumeration; public enum SexEnum {MALE(1, "男"),FEMALE(0, "女");private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id id;}public String getName…

Python 基本数据类型 (二) - 字符串

str.expandtabs([tabsize]): str类型的expandtabs函数&#xff0c;有一个可选参数tabsize&#xff08;制表符大小&#xff09;详细来说&#xff0c;expandtabs的意思就是&#xff0c;将字符串中的制表符\t&#xff0c;全部用空格来替换。至于用多少个空格&#xff0c;需要参考制…

如何预防后台被攻击?Tomcat 的安全配置来啦!

安全是系统架构中最重要的关注点之一&#xff0c;通常情况下&#xff0c;所说的安全涵盖网络安全、数据安全、操作系统安全、服务器安全以及应用系统安全等诸多方面。Tomcat 是一个免费的开放源代码 的Web应用服务器&#xff0c;技术先进、性能稳定。由于它优秀的稳定性以及丰富…

position详解

导读&#xff1a; position的定位类型有&#xff1a;static(默认值)、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;、sticky&#xff08;粘性定位&#xff09;。其中最常用的就是relative和ab…

原型设计列表

PencilFramerShireframeUIDesignerBalsamiq MockupsMockup BuilderMockupFrameBoxiPhone MockupGOOFLOWWireframeSketcherFluidIAIndigo StudioOrigamiQuartz ComposerJustprotoAvocadoPaintCodeMockplus(摩客)墨刀

IDC机房跳线

服务网卡口与配线架 这里有一根网线 记录方式 签 A:23FM-23U-T07 (配线架网线) B:23FM-23U-NIC1&#xff08;服务器网线&#xff09; 在配线架的机柜旁边一定写明了 跳线的对面的 交换和配线架的网线位置 比如 记录方式为 A:23FA-23FJ-T07 B:H3C-22U-T04 转载于:https://www…

常用的mysql sql_mode

ONLY_FULL_GROUP_BY&#xff1a; 对于GROUP BY聚合操作&#xff0c;如果在SELECT中的列&#xff0c;没有在GROUP BY中出现&#xff0c;那么这个SQL是不合法的&#xff0c;因为列不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO&#xff1a; 该值影响自增长列的插入。默认设置下&…

(转)Java atomic原子类的使用方法和原理(一)

在讲atomic原子类之前先看一个小例子: public class UseAtomic { public static void main(String[] args) { AtomicInteger atomicIntegernew AtomicInteger(); for(int i0;i<10;i){ Thread tnew Thread(new AtomicTest(atomicInteger)); t.start(); try { t.join(0); } ca…

Spring Boot 单例模式中依赖注入问题

在日常项目开发中&#xff0c;单例模式可以说是最常用到的设计模式&#xff0c;项目也常常在单例模式中需要使用 Service 逻辑层的方法来实现某些功能。通常可能会使用 Resource 或者 Autowired 来自动注入实例&#xff0c;然而这种方法在单例模式中却会出现 NullPointExceptio…

linux(centOS7,mini),python环境的搭建

今天想试一试python在linux下的工作&#xff0c;在vmware中安装了centOS7版本的linux&#xff0c;先前装过一个带GUI的&#xff0c;但是感觉在虚拟机理跑的太慢&#xff0c;干脆直接装一个最精简的mini版&#xff0c;试一下ifconfig&#xff0c;vim啥的全部commend not found。…

VO,BO,PO,DO,DTO的区别

面对这个图&#xff0c;让我们先从承上启下的DTO开始入手 DTO&#xff08;Data Transfer Object&#xff09;数据传输对象 这个传输通常指的前后端之间的传输 DTO是一个比较特殊的对象&#xff0c;他有两种存在形式&#xff1a; 在后端&#xff0c;他的存在形式是java对象&…

Windows下pip 离线包安装

pip在线安装十分方便&#xff0c;有时候某些服务器并没有直接联网&#xff0c;需要下载好安装包上传到服务器上进行安装&#xff0c;不经常用&#xff0c;还是有点小麻烦的。 安装Python之后&#xff0c;将下载好的安装包包放在Python安装的根目录下使用pip install packagenam…

mysql维护

1.通过 show engine innodb status命令来查看这些线程的状态&#xff1a; mysql>show engine innodb status\G *************************** 1. row ***************************Type: InnoDBName: #####################################################################…

VMware设置及linux静态ip设置

1. VMWARE虚拟机NAT模式上网设置 1.1. VM虚拟机设置 1.1.1. 虚拟机全局设置 启动虚拟机选择【虚拟网络编辑器】 如果需要管理员权限点【更改设置】&#xff0c;没有提示这忽略这一步 选择NAT模式&#xff0c;更改下面的子网IP&#xff0c;改成你需要的任何一个子网网段&…

InnoDB内存优化

1&#xff0e;InnoDB缓存机制 InnoDB用一块内存区做IO缓存池&#xff0c;该缓存池不仅用来缓存InnoDB的索引块&#xff0c;而且也用来缓存InnoDB的数据块&#xff0c;这一点与MyISAM不同。 在内部&#xff0c;InnoDB缓存池逻辑上由 free list、flush list和LRU list组成。顾名…

问题 L: 超超的中等意思

问题 L: 超超的中等意思 时间限制: 1 Sec 内存限制: 128 MB提交: 366 解决: 27[提交] [状态] [命题人:jsu_admin]题目描述 已知p,q,k和一个难搞得多项式(pxqy)^k。想知道在给定a和b的值下计算多项式展开后x^a*y^b得系数s。输入 多组输入&#xff0c;每组数据一行输入p,q,k,a,…

改善带有 order by子句或group子句SQL的性能

如果通过 show global status 看到 sort_merge_passes 的值很大&#xff0c;可以考虑通过调整参数sort_buffer_size的值来增大排序缓存区&#xff0c;以改善带有 order by子句或group子句SQL的性能。 对于无法通过索引进行连接操作的查询&#xff0c;可以尝试通过增大&#xf…