[codeforces 1325C] Ehab and Path-etic MEXs 绕不开的叶节点+特判

Codeforces Round #628 (Div. 2)   比赛人数9400

[codeforces 1325C]  Ehab and Path-etic MEXs   绕不开的叶节点+特判

总目录详见https://blog.csdn.net/mrcrack/article/details/103564004

也在线测评地址https://codeforces.com/contest/1325/problem/C

ProblemLangVerdictTimeMemory
C - Ehab and Path-etic MEXs GNU C++11Accepted77 ms1000 KB

第三题就出现了树,让人有些紧张。

在寻找mex(u,v)的最大值过程中,发现出现最大值的情况,该路径一定包含了两个叶节点,mex(u,v)的值由不在路径中的边的最小值决定,发现,不在路径中的节点,一定有其它叶节点

考虑将包含叶节点的边依次从最小值开始设置,检验,确实能找到符合题意的数据。剩下没有连上叶节点的边,依次设置剩下的值。

叶节点特征,度为1.

该题,还需特判,只有两个节点的情形,

Input:
2
1 2
Output:
0

AC代码如下:

#include <stdio.h>
#include <string.h>
#define maxn 100010
int d[maxn],last[maxn],ans[maxn];
int main(){
	int n,u,v,i,cnt=0;
	scanf("%d",&n);
	if(n==2){//特判,只有两个节点
		printf("0\n");
		return 0;
	}
	for(i=1;i<=n-1;i++){//i对应边的处理
		scanf("%d%d",&u,&v);
		d[u]++,d[v]++;//找出叶节点
		last[u]=i,last[v]=i;//找出叶节点所在的边
	}
	memset(ans,-1,sizeof(ans));
	for(i=1;i<=n;i++)//i对应点的处理
		if(d[i]==1)ans[last[i]]=cnt++;//叶节点所在边设置
	for(i=1;i<=n-1;i++)//i对应边的处理
		if(ans[i]==-1)ans[i]=cnt++;//非叶节点边设置
	for(i=1;i<=n-1;i++)printf("%d\n",ans[i]);
	return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值