【USACO 2013 open】【JZOJ 3234】阴阳

(一)企业微信 - 会话内容存档 企业微信获取会话记录。 阅读详情

Description

Farmer John 正在在计划自己的农场漫步。他的农场的结构就像一棵树:农场有N个谷仓(1<= N <=100,000),分别由N-1条路链接。这样,他便可以通过这些谷仓间的道路遍及各个谷仓。Farmer John想要选择一条路线:这条路线的起点和终点分别为农场中两个不同的谷仓,这条路线不能重复经过一条边两次。Farmer John担心这条路径可能会偏长,所以他想在路线上寻找一个休息点(当然这个休息点不能为起点或者终点)。

每条边的两旁都是牛群,要么是Charcolais(白毛),要么是Angus(黑毛)。Farmer John是一个聪明人,所以他想要在他通过小路的同时平衡小路两侧阴阳的力量。他要选择一条路径使得他从起点到休息站,和从休息站到终点这两段路上都满足路两边的Charcolais牛群和Angus牛群总数量相同。

Farmer John好奇他能找到多少条如上所述的平衡的路径。我们认为,当且仅当两条路线的边的集合不同时,这两条路径才被认为是不同的,否则认为是相同的路线。就算路线上有多个有效的“休息站”的位置能使路线平衡,我们也只记为一条路线。

请帮助计算有多少条不同的平衡路线。

Solution

很显然这是一道点分治,
白毛为1,黑毛为-1,
我们每轮的点分治表示过重心的合法路径,(以下的距离指与根节点的路径和)
设Cs表示之前从根出发第一次遇到距离为s的点的个数,cs为之前从根出发非第一次(也就是存在父亲(包括根)的和也为s)遇到距离为s的点的个数,当前的点为q,距离为s,
q对答案的贡献至少为cs,如果当前点存在父亲距离也等于s,那么还要加上Cs,因为我们必须找一个点作为休息点,
每轮更新一下数组即可
复杂的:O(2∗nlog(n));

Code

#include<iostream>
#include<cstdlib>
#include<cstdio>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long LL;
const int N=100500,maxlongint=2147483640;
int read(int &n)
{
    n=0;int q=0,w=1;char ch=getchar();
    for(;(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    if(ch=='-')w=-1,ch=getchar();
    for(;ch>='0'&&ch<='9';q=q*10+ch-48,ch=getchar());
    n=q*w;return n;
}
int B[2*N][3],A[N],B0;
int n,hw[N],c[2*N],c1[2*N];
LL ans;
int alln,ce,ces,z[2*N];
bool bj[N];
void join(int q,int w,int e)
{
    B[++B0][0]=A[q],A[q]=B0,B[B0][1]=w,B[B0][2]=e;
    B[++B0][0]=A[w],A[w]=B0,B[B0][1]=q,B[B0][2]=e;
}
int dfs(int q,int fa)
{
    int w;hw[q]=1;
    for(int i=A[q];i;i=B[i][0])if(!bj[w=B[i][1]]&&fa!=w)hw[q]+=dfs(w,q);
    return hw[q];
}
void findc(int q,int fa)
{
    int s=alln-hw[q],w;
    for(int i=A[q];i;i=B[i][0])if(!bj[w=B[i][1]]&&fa!=w)findc(w,q),s=max(s,hw[B[i][1]]+1);
    if(ces>s)ces=s,ce=q;
}
void add(int q,int s0,int fa)
{
    c[s0+N]+=(z[s0+N]!=0);c1[s0+N]+=(z[s0+N]==0);z[s0+N]++;
    for(int i=A[q];i;i=B[i][0])if(!bj[B[i][1]]&&fa!=B[i][1])add(B[i][1],s0+B[i][2],q);
    z[s0+N]--;
}
void find(int q,int s0,int fa)
{
    ans+=c[N-s0]+(z[s0+N]!=0)*c1[N-s0];
    z[s0+N]++;
    for(int i=A[q];i;i=B[i][0])if(!bj[B[i][1]]&&fa!=B[i][1])find(B[i][1],s0+B[i][2],q);
    z[s0+N]--;
}
void divide(int q)
{
    alln=dfs(q,q);
    ces=maxlongint;
    findc(q,q);bj[q=ce]=1;
    fill(c+N-alln-1,c+N+alln+1,0);fill(c1+N-alln-1,c1+N+alln+1,0);c1[N]=1;
    for(int i=A[q];i;i=B[i][0])if(!bj[B[i][1]])
    {
        z[N]=0;find(B[i][1],B[i][2],q);
        z[N]=1;add(B[i][1],B[i][2],q);
    }
    for(int i=A[q];i;i=B[i][0])if(!bj[B[i][1]])divide(B[i][1]);
}
int main()
{
    int q,w,e;
    read(n);
    fo(i,1,n-1)read(q),read(w),read(e),join(q,w,(e?1:-1));
    ans=0;
    divide(1);
    printf("%lld\n",ans);
    return 0;
}
解析 RABAX during SAPGUI Logon 错误及其解决方案 登录用户关联了初始启动程序,该程序由于未处理的异常导致运行时错误。在 ST22 查看错误的程序名和错误行。修复初始程序代码中的逻辑问题。重新部署修复后的代码。示例代码:防止未处理的异常TRY." 模拟逻辑处理ENDTRY.此代码通过 TRY-CATCH 块捕获潜在错误,避免程序崩溃。是 SAP 系统中常见的运行时错误,其根源可能涉及多个方面,包括用户配置、系统状态、数据库连接和自定义开发等。通过结合 ST22、SM21 等诊断工具,以及完善的代码实践和系统监控,可以有效预防和解决此类问题。 阅读详情

相关推荐

ADS 2024实战:手把手教你搞定CGH40010F的Doherty功放仿真与版图(附避坑指南)

本文详细介绍了使用ADS 2024进行CGH40010F Doherty功放从仿真到版图的全流程设计,涵盖器件建模、稳定性分析、负载牵引匹配和版图联合仿真等关键步骤。特别针对新手常见问题提供避坑指南,帮助工程师高效完成射频功放设计,提升5G基站和雷达系统的性能。

weixin_42528191的博客 221

[GDOI模拟2015.12.26][USACO 2013OPEN]阴阳(yinyang)

题目大意 一棵包含nn个节点的树,每条边都有类型00或11,求能满足一下条件的路径总数: ∙\bullet对于路径[st,en][st,en],存在点x≠st,enx\not=st,en,使得路径[st,x][st,x]上两种类型的边数总数相同,路径[x,en][x,en]上亦是如此。 1≤n≤1000001\le n\le100000 题目分析 两类边,要求总数相等,首先应该想

待成熟的葡萄 1128

别再乱选离散化方法了!从零到一用Matlab对比差分、双线性Tustin和预矫正的实战效果

本文深入探讨了Matlab中四种主流离散化方法(差分、双线性Tustin和预矫正)的实战效果对比,帮助工程师在数字控制系统设计中做出明智选择。通过详细的理论分析和Matlab代码示例,展示了不同方法在稳定性、频率响应和计算复杂度上的差异,并提供了针对不同场景的工程选用指南。

weixin_28737603的博客 141

【usaco 2013 open yinyang】阴阳

Farmer John 正在在计划自己的农场漫步。他的农场的结构就像一棵树:农场有N个谷仓(1<= N <=100,000),分别由N-1条路链接。这样,他便可以通过这些谷仓间的道路遍及各个谷仓。Farmer John想要选择一条路线:这条路线的起点和终点分别为农场中两个不同的谷仓,这条路线不能重复经过一条边两次。Farmer John担心这条路径可能会偏长,所以他想在路线上寻找一个休息点(当然

chen1352 888

Nangate 45nm FreePDK开源工艺库:从RTL到GDSII全流程实战

在数字IC设计中,标准单元库是连接逻辑综合与物理实现的基石,它定义了每个单元的逻辑功能、时序延迟与物理尺寸。开源EDA工具链的成熟,使得个人也能借助免费工艺套件完整跑通芯片设计流程。Nangate 45nm FreePDK作为一套经典的开源工艺库,凭借结构清晰、配套完善的特性,成为学习数字后端和时序收敛的理想训练场。从综合工具Yosys读取Liberty文件进行逻辑映射,到OpenROAD执行布局布线与时钟树综合,再到使用OpenSTA分析关键路径延迟,这套流程涵盖了数字设计最核心的环节。通过亲手操作,开发

weixin_29168393的博客 279

LangChain + Milvus Lite:从零搭建本地RAG知识库

本文详细介绍了如何利用LangChain、Milvus Lite和gte-large-zh模型,在本地从零搭建一个完整的RAG知识库系统。文章涵盖了环境配置、文档处理与向量化、本地向量库构建以及检索问答实现的全流程,重点突出了完全本地化部署带来的数据隐私安全和成本优势,为开发者提供了一条实践性极强的技术路径。

weixin_29044713的博客 445

JZOJ3234 阴阳

题目描述Farmer John 正在在计划自己的农场漫步。他的农场的结构就像一棵树:农场有N个谷仓(1<= N <=100,000),分别由N-1条路链接。这样,他便可以通过这些谷仓间的道路遍及各个谷仓。Farmer John想要选择一条路线:这条路线的起点和终点分别为农场中两个不同的谷仓,这条路线不能重复经过一条边两次。Farmer John担心这条路径可能会偏长,所以他想在路线上寻找一个休息点(

ZLTJohn的博客 1183

Vscode+ROS/ROS2 开发调试基于ROS/ROS2应用环境配置

在ROS操作系统开发应用程序时,我们常常需要调试代码,验证程序的正确性。但是在用rosrun或者roslaunch启动节点后,若程序运行过程中发生错误而导致发生出错停止工作,这时候终端并不会输出具体的信息指出在何处发生了错误,具体错误的原因又是什么。往往仅仅是core dump 或者segmentation fault 等等一类的模糊提示。

Chasinglight的博客 5801

Farmer John的故事

从前有个农民,名字叫约翰,于是大家叫他Farmer John(FJ)。FJ养了很多奶牛,这些奶牛很聪明,它们很喜欢看自然科学和数学书,但是它们对书的ISBN码感到奇怪,于是就有了ISBN问题。渐渐的,奶牛们的书多了起来,于是它们决定买背包来放书,然后就有了背包问题。奶牛们又喜欢上了下棋,于是就有了过河卒与骑士巡游问题。奶牛们决定航海去增长见识,在途中它们参与了对一艘名叫铁达尼克号的船的营救。最后,...

tystrwor的博客 6958

Blender地形建模实战:5步搞定Gazebo仿真地形(附避坑指南)

本文提供了一份详细的Blender地形建模实战指南,旨在帮助开发者快速创建Gazebo仿真地形。文章通过五个核心步骤,从环境准备、地形雕刻、模型优化导出,到创建Gazebo模型包及问题排错,系统讲解了如何将Blender中的地形模型成功导入Gazebo进行机器人仿真,并重点分享了关键的避坑经验。

weixin_28475533的博客 345

RK3588, 绘制中文OSD,实现左右对齐

基于RK3588,实现中文OSD, 上下左右对齐。

J。 662

阴阳 详细题解+代码

DescriptionFarmer John 正在在计划自己的农场漫步。他的农场的结构就像一棵树:农场有N个谷仓(1<= N <=100,000),分别由N-1条路链接。这样,他便可以通过这些谷仓间的道路遍及各个谷仓。Farmer John想要选择一条路线:这条路线的起点和终点分别为农场中两个不同的谷仓,这条路线不能重复经过一条边两次。Farmer John担心这条路径可能会偏长,所以他想在路线上寻

Jacky35 684

生成对抗网络(GAN)在数据增强中的应用【附核心实战代码】

生成对抗网络(GAN)由Ian Goodfellow等人在2014年提出。它包含两个主要的部分:生成器(Generator)和判别器(Discriminator)。生成器负责生成假数据,而判别器则用于区分输入的数据是真实的还是由生成器生成的。通过这种对抗过程,生成器不断优化自己,生成越来越真实的样本。最终,生成器生成的样本几乎无法被判别器区分与真实数据。

一键难忘的博客 3120

【usaco 2013 open】【JZOJ 3234】 阴阳

usaco 2013 open yinyang Description 给出一棵树。树的边权为1或-1。现在要求有多少个点对(u,v)(u,v)满足,存在中间点k(k≠u,v)k(k≠u,v),dis[u,k]=0dis[u,k]=0 且 dis[k,v]=0dis[k,v]=0。dis[u,v]dis[u,v]表示从uu到vv的最短路径上的边权和。Analysis求树上点对数的题目一般都用点分治解决。

LYD729 1134

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jzoj 3234. 阴阳

Description FarmerJohn正在在计划自己的农场漫步。他的农场的结构就像一棵树:农场有N个谷仓(1<=N<=100,000),分别由N-1条路链接。这样,他便可以通过这些谷仓间的道路遍及各个谷仓。FarmerJohn想要选择一条路线:这条路线的起点和终点分别为农场中两个不同的谷仓,这条路线不能重复经过一条边两次。FarmerJohn担心这条路径可能会偏长,...

自以为心若顽石,却终究人非草木。 261

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JZOJ3224.阴阳

题目描述 Farmer John 正在在计划自己的农场漫步。他的农场的结构就像一棵树:农场有N个谷仓(1<= N <=100,000),分别由N-1条路链接。这样,他便可以通过这些谷仓间的道路遍及各个谷仓。Farmer John想要选择一条路线:这条路线的起点和终点分别为农场中两个不同的谷仓,这条路线不能重复经过一条边两次。Farmer John担心这条路径可能会偏长,所以他想在路...

fengqiyuka的博客 234

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2019.07.11【NOIP提高组】模拟 A 组&B组总结

这次XC把A组和B组放反了,于是我们只好同时改2个比赛的题目……

_Alexander_的博客 419

照片 usaco 2013 open photo

题目Farmer John决定为他的N头排列好的奶牛(1 <= N<= 200,000)做一张全景合照。这N头奶牛分别以1..N进行编号。他一共拍了M(1<= M <=100,000)张相片,每张相片都只包含有一部分位置连续的奶牛:第i张照片涵盖着编号从a_i到b_i的所有奶牛。当然,这些照片合起来并不保证包含所有的牛。Farmer John拍摄完所有的相片后,注意到一个很有趣的现象:他拍的每张照片

Andy&Calrn的博客 1294

cf 143C Help Farmer 题解

看到题意第一眼想到可以找到n的所有因数遍历一遍取最大最小值。n^3的时间复杂度。。。不会T #include<bits/stdc++.h> using namespace std; const int N =2100; int main() { int64_t n; while(~scanf("%I64d",&n)) { int64_...

mmm______g的博客 313

[USACO13OPEN]照片Photo

f[i]表示到i之前且i必须放的最多斑点奶牛数, l[i]表示放了i这个点之后,最远到哪里必须要再放一个。 r[i]表示放了i这个点之后,最近到哪里能再放一个。

cx_lzx蒟蒻的博客 907

谷仓(cbarn)

谷仓(cbarn)@TOC 第一题:谷仓(cbarn) 有一个圆形的谷仓,共有n个房间,按顺时针编号从1到n。 现在有许多头奶牛,他们都有自己最喜欢的一个房间。傍晚回家时, 奶牛们去找自己最喜欢的房间。如果发现被占了,他们就会按照顺时针 方向找第一个空闲的房间住进去。现在请你输出最小的空闲的房间号。 注意,这个答案和奶牛们回家的顺序是无关的。 2<=n<=3000000,1<=k...

yao____yi的博客 731

洛谷 P3084 [USACO13OPEN]照片Photo

https://daniu.luogu.org/problem/show?pid=3084 单调性dp 我靠你看到这个题目,怎么看都和查分约束有点关系对不对; 估计是我差分约束学的不好,也找不到为什么不能用差分约束,就是构造不出来; 我们思考dp f[i]表示到igxe点切i点有一头斑点牛的最大值 显然有些位置是一定不能放斑点牛的; 那么对于可以放牛的i点我们有2个限制 每一个区间最

我怎么这么菜的呢 798

bzoj 3126: [Usaco2013 Open]Photo (DP+单调队列)

题目描述传送门题目大意:给你一个n长度的数轴和m个区间,每个区间里有且仅有一个点,问能有多少个点题解想了各种不科学的贪心和乱搞,最终还是回到了DP上。 f[i]f[i]表示到第i个位置且第i个位置必放最多能放多少个点。 对于每个位置,他前一个能放置的位置应该是满足一个区间的。 因为一个区间中只能有一个点,所以包含这个点的所有区间都不能再放,就是要找到包含这个点的区间中左端点最小的位置,R[i]

clover_hxy的博客 1110

Jzoj2183 树

 图论中的树为一个无环的无向图。给定一棵树,每个节点有一盏指示灯和一个按钮。如果节点的按扭被按了,那么该节点的灯会从熄灭变为点亮(当按之前是熄灭的),或者从点亮到熄灭(当按之前是点亮的)。并且该节点的直接邻居也发生同样的变化。  开始的时候,所有的指示灯都是熄灭的。请编程计算最少要按多少次按钮,才能让所有节点的指示灯变为点亮状态。 高斯消元裸题 好吧如果出到100W就不能这么做了(虽...

dianning8393的博客 287

USACO2013nov_bonze名称记录

[usaco2013nov_bronze]records 描述 Description Records Farmer John对他的每一头进入谷仓产奶的奶牛都有详细的记录,每小时有一组牛进入,每组有三头牛。Farmer John会记下他们的名字。比如说:经过五小时,他可能会写下下列名单,每一行对应一组进入谷仓的奶牛: BESSIE ELSIE MATILDA FRAN BESSIE ING...

BIGBIGPPT的博客 392

bzoj3126[Usaco2013 Open]Photo 单调队列+dp

又是久违的单队dp。。然而我并没有切出来,真是菜哭了。。 题意:给你一个n长度的数轴和m个区间,每个区间里有且仅有一个点,问能有多少个点一开始还在想能不能乱搞,因为被包含的区间肯定是没用的,只有相交的区间才有用,问题是哪怕是相交也会有很多种奇葩的情况,感觉分类讨论应该不对。 然后线段树啊啥的都想过就是没想过dp。。 真是傻叉啊我。。 设f[i]表示做到i这个位置,必选i的最大方案数。 那么

老臣 824
上一篇: 【GDOI 2016 Day2】SigemaGO
下一篇: 关于μ和φ关系
HOWARLI
博客等级 码龄11年 109粉丝 378原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值