dfs(又是看大佬提交代码的一天)

链接:https://ac.nowcoder.com/acm/problem/18947
来源:牛客网

题目描述
小w不会离散数学,所以她van的图论游戏是送分的
小w有一张n个点n-1条边的无向联通图,每个点编号为1~n,每条边都有一个长度
小w现在在点x上
她想知道从点x出发经过每个点至少一次,最少需要走多少路
输入描述:
第一行两个整数 n,x,代表点数,和小w所处的位置
第二到第n行,每行三个整数 u,v,w,表示u和v之间有一条长为w的道路
输出描述:
一个数表示答案
示例1
输入
复制
3 1
1 2 1
2 3 1
输出
复制
2

大部分路都要走两边,只有最多的一条路不需要走 找到这条路就可以了

#include<iostream>                            //https://ac.nowcoder.com/acm/problem/18947
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;
#define ll long long 
int n,x,sum=0;
ll cent = 0;                        //怕爆所以开ll 
vector<int>v[N];                    //两个vevtor,一个对于每个点联通的节点,一个存对应的路的长度 
vector<int>w[N]; 
void dfs(int now,int fa,ll cen)
{
    for(int i=0;i<v[now].size();i++)
    {
        if(v[now][i]==fa) continue;                        //当等于时 , 本来就是双向连通图, 自己的子节点
        dfs(v[now][i],now,cen+w[now][i]);                // 中也就相当于包括自己的父节点 ,所以为了避免搜索时搜索回去,所以需要写if 
    }
    if(now!=x&&v[now].size()==1)                        //相当于跳出条件吧,当size等于 1时,也就是到达了末尾,除了返回上一级
                                                        //也没有别的,cent负责记录最大的一条路,这条路在题中只走一次 
    {
        cent = max(cent,cen);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>x;
    for(int i=0;i<n-1;i++)
    {
        int t1,t2,c;
        cin>>t1>>t2>>c;
        v[t1].push_back(t2);            //对应下去,因为是无向的,所以互相存 
        v[t2].push_back(t1);
        w[t1].push_back(c);
        w[t2].push_back(c);
        sum+=c;
    }
    dfs(x,-1,0);
    cout<<sum*2-cent<<endl;                //大部分路都要走两边,只有最多的一条路不需要走 
    return 0;    
} 
全部评论

相关推荐

真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务