Fork me on GitHub

游(qbxt)

这里写图片描述
N<=50000, W<=1000
ans=2*Σw-1号点到图上其他点的最远距离

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<queue>
#define M 50000
using namespace std;
int n,cnt=1,num[2*M+10],nxt[2*M+10],head[M+10],val[2*M+10];
int f[M+10]; 
int ans,tot;
void add(int s,int t,int w)
{
    cnt++;
    num[cnt]=t;
    nxt[cnt]=head[s];
    head[s]=cnt;
    val[cnt]=w;
}
void dfs(int x,int z)
{
    int p=0;
    for(int i=head[x];i;i=nxt[i])
    {
        int k=num[i];
        if(f[k]==0)
        {
            f[k]=1;p=1;
            dfs(k,z+val[i]);
        }
    }
    if(p==0) 
    {
        ans=max(ans,z);
        return;
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<n;i++)
    {
        int s,t,w;
        scanf("%d%d%d",&s,&t,&w);
        add(s,t,w);
        add(t,s,w);
        tot+=w;
    }
    f[1]=1;
    dfs(1,0);
    ans=2*tot-ans;
    printf("%d",ans);
    return 0;
}
posted @ 2017-09-24 17:48  primes  阅读(116)  评论(0编辑  收藏  举报