P3304 [SDOI2013] 直径
1.G. Vlad and Trouble at MIT2.P2899 [USACO08JAN] Cell Phone Network G3.Watering an Array4.P2055 [ZJOI2009] 假期的宿舍5.T432579 大西洋船王6.T432580 星云 hard ver.7.P7072 [CSP-J2020] 直播获奖8.E - Insert or Erase9.D - String Bags10.P2671 [NOIP2015 普及组] 求和11.P1884 [USACO12FEB] Overplanting S12.F. Microcycle13.E. Increasing Subsequences__214.G. Path Prefixes15.F. Rudolf and Imbalance16.P1355 神秘大三角17.[ARC172A] Chocolate18.F. 0, 1, 2, Tree!19.E. Nearly Shortest Repeating Substring20.P1354 房间最短路问题21.P3258 [JLOI2014] 松鼠的新家22.P3052 [USACO12MAR] Cows in a Skyscraper G23.P1337 [JSOI2004] 平衡点 / 吊打XXX24.P3745 [六省联考 2017] 期末考试25.D. Inaccurate Subsequence Search26.E. Long Inversions27.C. Deep Down Below28.C. Rings29.F. Unfair Game30.C. Inversion Graph31.D. Cross Coloring32.D2. Set To Max (Hard Version)33.C. Array Game34.F. Alex's whims35.Queue Sort36.P10252 线性变换37.P10288 [GESP样题 八级] 区间38.P2161 [SHOI2009] 会场预约39.L2-001 紧急救援40.L2-002 链表去重41.L2-013 红色警报42.L2-014 列车调度43.L2-022 重排链表44.L2-023 图着色问题45.L2-039 清点代码库46.L2-034 口罩发放47.L3-037 夺宝大赛48.仓库规划49.因子化简50.C. Torn Lucky Ticket51.俄罗斯方块52.F. Cutting Game53.D. Prefix Permutation Sums
54.P3304 [SDOI2013] 直径
题解
先随便找一条直径,然后标记这些边,然后看看直径上的点有没有不需要经过标记边的路径,使得其长度等于该点到直径端点的路径长度
code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct edge
{
ll to,val;
};
vector<edge> G[200005];
ll maxh=0;
ll node=1;
void dfs(ll now,ll fa,ll height)
{
if(height>maxh)
{
maxh=height;
node=now;
}
for(auto next:G[now])
{
if(next.to==fa) continue;
dfs(next.to,now,height+next.val);
}
}
vector<ll> chain;
ll pre[200005]={0};
bool vis[200005]={0};
bool query(ll now,ll fa,ll des)
{
if(now==des)
{
chain.push_back(now);
vis[now]=1;
return 1;
}
for(auto next:G[now])
{
ll to=next.to;
if(to==fa) continue;
if(query(to,now,des))
{
chain.push_back(now);
ll tem=chain.size()-1;
pre[tem]=pre[tem-1]+next.val;
vis[now]=1;
return 1;
}
}
return 0;
}
ll check(ll now)
{
ll res=0;
for(auto next:G[now])
{
ll to=next.to,val=next.val;
if(vis[to]) continue;
vis[to]=1;
res=max(res,check(to)+val);
vis[to]=0;
}
return res;
}
void solve()
{
ll n;
cin>>n;
for(ll i=1;i<n;i++)
{
ll x,y,w;
cin>>x>>y>>w;
G[x].push_back({y,w});
G[y].push_back({x,w});
}
dfs(1,1,0);
ll node1=node;
maxh=0;
node=node1;
dfs(node1,node1,0);
ll node2=node;
query(node1,node1,node2);
ll len=chain.size();
ll l=0,r=len-1;
for(ll i=1;i<len-1;i++)
{
ll res=check(chain[i]);
ll sum=pre[i];
if(res==sum) l=i;
if(res==pre[len-1]-sum)
{
r=i;
break;
}
}
cout<<pre[len-1]<<'\n';
cout<<r-l<<'\n';
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
ll t=1;
while(t--) solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~