dp求树的直径及条数(模板)
Posted thusloop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dp求树的直径及条数(模板)相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h>
#define int long long
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf=2e18+100;
const int maxn=1e5+100;
vector<pair<int,int>>g[maxn];
int pos,mxdis;
int cnt;
int dis[maxn],num[maxn];
int ans;
void dfs(int x,int f)
{
dis[x]=0;num[x]=1;
for(auto it:g[x])
{
if(it.first==f)continue;
dfs(it.first,x);
int tp=it.second+dis[it.first];
if(tp+dis[x]>mxdis)
{
mxdis=tp+dis[x];
ans=num[it.first]*num[x];
}
else if(tp+dis[x]==mxdis)
{
ans+=num[it.first]*num[x];
}
if(tp>dis[x])
{
dis[x]=tp;
num[x]=num[it.first];
}
else if(tp==dis[x])
{
num[x]+=num[it.first];
}
}
}
signed main()
{
int n;
cin>>n;
for(int i=1; i<n; i++)
{
int u,v,w;
cin>>u>>v>>w;
g[u].push_back({v,w});
g[v].push_back({u,w});
}
mxdis=-inf;
dfs(1,-1);
cout<<mxdis<<" "<<ans<<"\\n";
}
以上是关于dp求树的直径及条数(模板)的主要内容,如果未能解决你的问题,请参考以下文章