求助为什么80分(dfs+邻接表)
查看原帖
求助为什么80分(dfs+邻接表)
797344
PlayerMeng楼主2023/3/18 19:41
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;

const int INF=1e9;
int cnt[105],h[105],e[105],ne[105],idx;

void add(int a,int b){
	e[idx]=b;
	ne[idx]=h[a];
	h[a]=idx++;
}

int dfs(int u,int father,int dist){
	int sum=cnt[u]*dist;
	for(int i=h[u];i!=-1;i=ne[i]){
		int j=e[i];
		if(j==father)continue;
		sum+=dfs(j,u,dist+1); 
	}
	return sum;
}

int main(){
	int n;
	cin>>n;
	memset(h,-1,sizeof(h));
	for(int i=1;i<=n;i++){
		int a,b;
		cin>>cnt[i]>>a>>b;
		if(a)add(i,a),add(a,i);
		if(b)add(i,b),add(b,i);
	}
	int res=INF;
	for(int i=1;i<=n;i++){
		res=min(res,dfs(i,-1,0));
	}
	cout<<res;
	return 0;
}
2023/3/18 19:41
加载中...