站外题爆0代码求调
  • 板块灌水区
  • 楼主Furukawa_Nagisa
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/3 00:15
  • 上次更新2024/3/3 10:26:02
查看原帖
站外题爆0代码求调
1043012
Furukawa_Nagisa楼主2024/3/3 00:15

rt 悬关

题目


题目描述

给定一棵树,其n个顶点的编号为1到n。第i条边连接顶点a和顶点b。顶点i的颜色为c[i]。如果从顶点1到顶点i的路径上(最短路径),不包含与点i相同颜色的点,我们称顶点i为好点。请按照升序输出所有好点。

输入格式
第一行输入一个正整数 ,表示顶点的数量。第二行输入n个正整数 ,分别表示每个点的颜色。 之后  行,每行输入两个正整数 ,表示一条树边。

输出格式
使用换行符作为分隔符,按升序输出所有好点的编号。

我的代码 自测爆0了


#include<bits/stdc++.h>
using namespace std;
int n,c[100003],g[100003],vis[100003],cnt=2;
vector<int>son[100003];
void dfs(int a){
	if(son[a].size()==0) return; 
	for(int i=1;i<=son[a].size();i++){
		int co=son[a][i];
		if(!vis[c[co]]){
			vis[c[co]]=1;
			g[cnt]=co;
			cnt++;
			dfs(co);
			vis[c[co]]=0;
		}else return;
	}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1;i<=n-1;i++){
int a,b;
cin>>a>>b;
son[a].push_back(b);
}
vis[1]=c[1];
g[1]=1;
dfs(1);
sort(g+1,g+n+1);
for(int i=1;i<=cnt;i++) cout<<g[i]<<"\n";
	return 0;
}
2024/3/3 00:15
加载中...