• 洛谷P1364


    给定一颗二叉树,每个结点都有一个value值,每一层二叉树之间默认的距离是1,求一个点x,使得其余点到此点的路径最短(路径的定义:点与x之间的距离(层数之差)*该点的value)
    运用结构体数组加vector存图,储存两点之间的路径关系和每个点的value值,枚举每一个点,用dfs求出其余点到该点的路径,最后取最小的那一个。
    时间复杂度(O(n^2))

    #include <algorithm>
    #include <vector>
    #include <cstring>
    using namespace std;
    const int N =1e5+10;
    struct tree{
    	int value;
    	vector<int>mp;
    }s[N];
    bool vis[N];
    int n,step,ans;
    int dfs(int x,int step)
    {
    	vis[x]=true;//dfs中,为了保证搜完一层往下搜不会出现重复(往上)的情况,需要用一个bool数组记录一下当前走过的点
    	int ans=step*s[x].value;
    	for(int i=0;i<s[x].mp.size();i++)
    	{
    		if(!vis[s[x].mp[i]]) ans+=dfs(s[x].mp[i],step+1);
    	}
    	return ans;
    } 
    int main()
    {
    	ans=1e9;
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		int l,r;
    		scanf("%d%d%d",&s[i].value,&l,&r);
    		if(l) s[l].mp.push_back(i),s[i].mp.push_back(l);
    		if(r) s[r].mp.push_back(i),s[i].mp.push_back(r);
    	}
    	for(int i=1;i<=n;i++) 
    	{
    		memset(vis,false,sizeof(vis));
    		int tmp=dfs(i,0);
    		if(tmp<ans) ans=tmp;
    	}
    	printf("%d
    ",ans);
    } ```
  • 相关阅读:
    synchronized优化手段:锁膨胀、锁消除、锁粗化和自适应自旋锁...
    synchronized 优化手段之锁膨胀机制!
    synchronized 加锁 this 和 class 的区别!
    SpringBoot中时间格式化的5种方法!
    阿里云ddns shell 脚本
    adb 备份apk
    paddlex_gui_win10(飞浆)
    cuda 版本对照
    PaddleHub
    yum 查找库对应的包
  • 原文地址:https://www.cnblogs.com/daoyuan/p/13461246.html
Copyright © 2020-2023  润新知