小K的疑惑

链接:https://ac.nowcoder.com/acm/contest/216/C
来源:牛客网

【题目描述】
众所周知,小K是一只连NOIP2018初赛都没有过的蒟蒻,所以小K很擅长dfs序+分块树,但是本题与dfs序+分块树无关。
小K现在心态爆炸了,因为小K被一道简单的数据结构题给卡住了,希望请你来解决它,但是小K又不想太麻烦你,于是将题面进行了简化(其实是出题人懒得写题面了233333):
Bob有?个点的树,每条边的长度有一个边权,现在定义???(?,?)代表第?个点到第?个点的距离模2之后的结果。问有多少(?,?,?)满足,???(?,?) = ???(?,?) = ???(?,?)。

【输入描述】
第一行一个整数?代表点的数量。
接下来? − 1行每行三个数?,?,?代表有一条在?,?之间长度为?的边。

【输出描述】
一行一个整数代表有多少对(?,?,?)满足条件。

【输入样例】
3
1 2 3
1 3 4

【输出样例】
9

【数据范围】
对于100%的数据,1 ≤ ? ≤ 10000,0 ≤ ? ≤ 233。

思路:原本想到了暴力写部分分:倍增求最近公共祖先+树上差分 ,事实上这种方法不仅不是正解而且效率很低,只能处理不到1000的数据量。
首先分析题目,模2之后的结果只能是0或1,三者相等的情况不可能等于1,可以画出图找找规律,只能等于0,然后通过Dfs找出每个点与根节点的关系,有两种可能,到根节点路径长为偶数,记为0,长为奇数,记为1,将个数分别记录在cnt[0]和cnt[1]中,最后利用乘法原理解决问题。注意,此题不开long long会爆。

下面看了一个牛客网大神的解释:

首先易证得如果i,j,k满足题目中得三个关系式,则他们任意两点间的距离必定为偶数(i,j,k可重复)。
然后可以先用DFS或BFS计算出每个点到根节点得距离(谁是根节点都行,用节点1就不错)。
然后统计出到根节点距离为奇数得点的数量cnt1和到根节点距离为偶数的点的数量cnt2.
自己推一推发现,当且仅当到根节点距离奇偶性相同的点他们之间相互的距离都为偶数。
所以ans=cnt1³+cnt2³.
复杂度O(n)。(转自牛客网)
是不是理解更深了呢?

#include<iostream>
#include<cstdio>
#include<cstring>
#define mem(a,b) memset(a,b,sizeof a)
#define LL long long
using namespace std;
const int MAX_N=1e4+7;
int n;
int eid;
struct node{
	int v,w,next;
}e[2*MAX_N];
int dist[MAX_N];
int p[MAX_N];
LL cnt[3];

void init()
{
	mem(dist,0);
	mem(e,0);
	mem(p,-1);
	eid=0;
}

void insert(int u,int v,int w)
{
	e[eid].v=v;
	e[eid].w=w;
	e[eid].next=p[u];
	p[u]=eid++;
}

void insert2(int u,int v,int w)
{
	insert(u,v,w);
	insert(v,u,w);
}

void dfs(int u,int fa,int w)
{
	dist[u]=(dist[fa]+w)%2;
	cnt[dist[u]]++;
	for(int i=p[u];~i;i=e[i].next)
	{
		if(e[i].v!=fa)
		{
			int v=e[i].v;
			int w=e[i].w;
			dfs(v,u,w);
		}
	}
}

LL Pow_3(LL x)
{
	return x*x*x;
}

int main()
{
	scanf("%d",&n);
	init();
	for(int i=1;i<n;i++)
	{
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		insert2(u,v,w%2);
	}
	dfs(1,0,0);
	printf("%lld",(LL)(Pow_3(cnt[0])+Pow_3(cnt[1])));
	return 0;
}
<think>好的,我需要解释IP69K是什么。首先,IP代码是国际防护等级认证,由IEC 60529标准定义。IP后面的数字代表不同防护级别。第一个数字是防固体异物,第二个是防液体。 用户问的是IP69K,所以我要拆开解释每个数字和字母的含义。第一个数字6,表示完全防尘,最高等级。第二个数字9,可能用户会疑惑,因为常见的最高是8,这里需要说明IP69K的特殊性,它属于特定标准,比如DIN 40050-9,用于高温高压下的防护。 然后解释K的含义,可能代表测试条件的不同,比如高压高温水喷射。要强调IP69K常见于需要经常清洗的环境,如食品工业或汽车行业。可能还需要比较IP68和IP69K的区别,比如IP68是长时间浸水,而IP69K是高压高温水柱下的防护。 需要确保术语准确,比如提到测试时的水压、温度、喷射角度等参数,比如80°C水温,80-100 bar压力,不同角度的喷射。这样用户能理解具体应用场景。 最后总结应用领域,如医疗设备、食品加工、重型机械等,帮助用户明确适用场景。同时提醒虽然防护等级高,但具体产品还需参考厂商说明,确保全面性。</think>IP69K是一种国际防护等级认证,用于描述设备对**固体异物**和**液体侵入**的防护能力。其定义基于国际标准IEC 60529,并结合了德国工业标准DIN 40050-9。以下是分步解释: --- ### 1. **IP代码的含义** IP(Ingress Protection)代码由两位数字和可选字母组成,格式为`IPXY`: - **第一位数字(X)**:防固体异物等级(0~6) - **第二位数字(Y)**:防液体侵入等级(0~9K) --- ### 2. **IP69K的具体定义** - **第一位数字:6** 表示**完全防尘**(最高防固体等级),设备内部无灰尘进入。 - **第二位数字:9K** 表示**可抵抗高温高压水喷射**。测试条件包括: - **水温**:80°C - **水压**:80~100 bar(约8~10 MPa) - **喷射距离**:10~15 cm - **喷射角度**:0°、30°、60°、90°(每个方向持续30秒) --- ### 3. **IP69K与IP68的区别** - **IP68**:可长期浸没在水中(深度和时间由制造商定义)。 - **IP69K**:针对高温高压水柱的防护,适用于需要频繁清洗的场景。 --- ### 4. **典型应用场景** - **食品加工设备**:需耐受高压高温清洗。 - **汽车工业**:发动机部件、传感器等暴露于恶劣环境。 - **医疗设备**:手术器械或消毒环境。 - **工业机械**:重型设备在高压冲洗下的防护。 --- ### 5. **注意事项** - IP69K **不保证防水蒸气或化学腐蚀**。 - 具体防护性能需参考厂商提供的测试参数。 通过以上标准,IP69K认证的设备能在极端清洁或高压冲洗环境中稳定工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值