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);
    } ```
  • 相关阅读:
    paramiko使用
    requests防止中文乱码
    RESTful架构
    关于pandas
    echarts基础使用
    跨站请求伪造CSRF原理
    js将方法作为参数调用
    Newtonsoft.Json解析json字符串和写json字符串
    图片压缩
    sql去重
  • 原文地址:https://www.cnblogs.com/daoyuan/p/13461246.html
Copyright © 2011-2022 走看看