打卡信奥刷题(3448)用C++实现信奥题 P10418 [蓝桥杯 2023 国 A] 相连的边
P10418 [蓝桥杯 2023 国 A] 相连的边题目描述给定一棵包含nnn个结点的树找出333条边使得这三条边的端点仅经过这三条边即可互相到达且三条边的长度和尽可能大。输入格式输入第一行包含一个整数nnn表示树的结点数。接下来n−1n−1n−1行每行包含两个整数用一个空格分隔。其中第iii行的两个数xi,yix_i,y_ixi,yi表示编号为i1i1i1和xix_ixi的结点之间有一条长度为yiy_iyi的边。输出格式输出一行包含一个整数表示满足要求的三条边的长度之和的最大值。输入输出样例 #1输入 #15 1 1 2 1 3 7 1 10输出 #112说明/提示【样例解释 1】结点222和结点111的边长为111结点333和结点222的边长为111结点444和结点333的边长为777结点555和结点111的边长为101010。【评测用例规模与约定】对于20%20\%20%的评测用例4≤n≤3004\le n\le 3004≤n≤300对于40%40\%40%的评测用例4≤n≤50004\le n\le 50004≤n≤5000对于所有评测用例4≤n≤2×1054\le n\le 2\times 10^54≤n≤2×1051≤xii1\le x_ii1≤xii1≤yi≤1091\le y_i\le 10^91≤yi≤109。C实现#includebits/stdc.husingnamespacestd;constintN(int)2e510;vectorpairint,intg[N];intmain(){intn;cinn;for(inti2;in;i){intx,y;cinxy;g[i].push_back({y,x});g[x].push_back({y,i});}longlongans0;for(inti1;in;i){sort(g[i].begin(),g[i].end(),greaterpairint,int());if(g[i].size()3){ansmax(ans,0llg[i][0].firstg[i][1].firstg[i][2].first);}}for(inti1;in;i){if(g[i].size()1)continue;for(auto[y,x]:g[i]){if(g[x].size()1)continue;longlongsumy;sum(g[x][0].second!i?g[x][0]:g[x][1]).first;sum(g[i][0].second!x?g[i][0]:g[i][1]).first;ansmax(ans,sum);}}coutans\n;return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容