题意:把输入的S点做为根节点,然后把输入的图看成一棵树,使的树中的所有叶子节点与跟节点都不存在一条通路
图片说明
为什么说是可以看成树, 因为n个节点m条边的无向连通图,又因为M条边,M+1个节点,emmm...数据结构教材上树的定义魔改后可以这样看
题解:树形DP(今天刚学,逃..........)
什么是树形DP,指在树这种数据结构上进行的DP:给出一棵树,要求最少的代价(或取得最大的收益)完成给定的操作,
emmm...那个跑题了,拉回来
设第图片说明 个点为根节点,并设其最终结果为图片说明 ,那么图片说明 是否就等于他所有的直接到达的孩子节点所的图片说明图片说明 取最小的求和图片说明

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2e5+10;
vector<ll>sc[maxn];
vector<ll>v[maxn];
ll n,m,s;
ll dfs(ll u,ll v1,ll c3)
{
    if(sc[u].size()==1&v1!=0)
    {

        return v[u][0];
    }
  ll ans=0;
    int len=sc[u].size();
    for(int i=0; i<len; i++)
    {if(sc[u][i]!=v1)
        ans+=dfs(sc[u][i],u,v[u][i]);

    }
    return min(ans,c3);

}
int main()
{

    cin>>n>>m>>s;
    for(int i=0; i<m; i++)
    {
        ll a,b,c;
        cin>>a>>b>>c;
        sc[a].push_back(b);
        sc[b].push_back(a);
        v[a].push_back(c);
        v[b].push_back(c);
    }
    cout<<dfs(s,0, (1ll << 63) - 1);

}