zoukankan      html  css  js  c++  java
  • 洛谷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);
    } ```
  • 相关阅读:
    [20210908]Reverse Shell with Bash.txt
    [20210831]bbed读取数据块6.txt
    自主学习 之 用Python玩转数据
    简单四则运算(PSP)
    永久免费云服务器搭建国内Moon服务加速ZeroTier
    INDEX
    openjdk 8 的 hotspot 源码目录结构
    CentOS 7 编译 openjdk 8
    23
    22
  • 原文地址:https://www.cnblogs.com/daoyuan/p/13461246.html
Copyright © 2011-2022 走看看