论这两份求树的直径的 1K 代码的区别
  • 板块学术版
  • 楼主zhlzt
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/18 19:33
  • 上次更新2024/7/18 20:19:09
查看原帖
论这两份求树的直径的 1K 代码的区别
571147
zhlzt楼主2024/7/18 19:33

前者得分 100,后者得分 18。

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
long long dp[maxn],dpans[maxn];
vector<pair<int,long long> >edge[maxn];
void dfs(int u,int fath){
    vector<long long>sta;
    sta.clear();
    for(int i=0;i<edge[u].size();i++){
        pair<int,int> cur=edge[u][i];
        int v=cur.first;
        long long w=cur.second;
        if(v==fath) continue; dfs(v,u);
        sta.push_back(w+dp[v]);
    }
    int cnt=sta.size();
    sort(sta.begin(),sta.end());
    if(cnt>0) dp[u]=dpans[u]=sta[cnt-1]; 
    if(cnt>1){
        dpans[u]=sta[cnt-2]+sta[cnt-1];
    }
}
int main(){
    int n;scanf("%d",&n);
    for(int i=1;i<n;i++){
        int u,v;long long w;scanf("%d%d%lld",&u,&v,&w);
        edge[u].push_back(make_pair(v,w));
        edge[v].push_back(make_pair(u,w));
    }
    dfs(1,0); long long ans=0;
    for(int i=1;i<=n;i++) ans=max(ans,dpans[i]);
    long long val=10ll*ans+1ll*ans*(ans+1)/2;
    printf("%lld\n",val);
	return 0;
}
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e5+10;
int dp[maxn],dis[maxn];
int sta[maxn];
vector<pair<int,int> >edge[maxn];
void dfs(int u,int dad){
    int pos=0;
    for(int i=0;i<edge[u].size();i++){
        pair<int,int> cur=edge[u][i];
        int v=cur.first,w=cur.second;
        if(v==dad) continue;
        dfs(v,u); sta[++pos]=dp[v]+w;
    }
    sort(sta+1,sta+1+pos);
    if(pos>0) dp[u]=dis[u]=sta[pos];
    if(pos>1){
        dis[u]=max(dis[u],sta[pos]+sta[pos-1]);
    }
}
signed main(){
    int n;scanf("%lld",&n);
    for(int i=1;i<n;i++){
        int u,v,w;scanf("%lld%lld%lld",&u,&v,&w);
        edge[u].push_back(make_pair(v,w));
        edge[v].push_back(make_pair(u,w));
    }
    dfs(1,0); int ans=0;
    for(int i=1;i<=n;i++) ans=max(ans,dis[i]);
    long long val=10ll*ans+1ll*ans*(ans+1)/2;
    printf("%lld\n",val);
    return 0;
}
2024/7/18 19:33
加载中...