• VNOJ
  • Trang chủ
  • Danh sách bài
  • Các bài nộp
  • Thành viên
    >
    • Tổ chức
  • Các kỳ thi
  • Wiki
  • Thông tin
    >
    • FAQ
    • Trình chấm ngoài
    • Tag
    • Máy chấm
    • Devlog
    • Github
    • Tickets
    • Thư viện đề thi
    • Đề xuất contest
  • Tạp chí
VI EN Đăng nhập  hoặc  Đăng ký

dhdu2010bm

  • Thông tin
  • Thống kê
  • Blog

Số bài đã giải: 31
Hạng điểm: #7304
Tổng điểm: 8,72
Đóng góp: 0

Xem các bài nộp

Từ Trường THPT chuyên Lương Văn Tụy, Ninh Bình

Thông tin

include<bits/stdc++.h>

using namespace std;

define int long long

const long long N=1e6+5; vector<pair<int,int>> adj[N]; int u0=0; long long d[N],n,m,t,pre[N],res=-1; bool vis[N]; void dfs(int u,int p) { vis[u]=true; for(auto [v,w] : adj[u] ) { if(v!=p) { vis[v]=true; d[v]=d[u]+w; pre[v]=u; dfs(v,u); }

}
if(d[u0]&lt;d[u]) u0=u;

} signed main() { ios::syncwithstdio(0); cin.tie(0); // freopen("d.inp","r",stdin); // freopen("d.out","w",stdout); cin>>n>>m>>t; for(int i=1; i<=m; i++) { int u,v,w; cin>>u>>v>>w; adj[u].pushback({v,w}); adj[v].pushback({u,w}); } vector<int> v; for(int i=0; i<n; i++) { if(!vis[i]) { d[i]=0; u0=i; dfs(i,-1); int s=u0; d[s]=0; u0=s; dfs(s,-1); res=max(res,d[u0]); int c=u0,r=1e18; while(true) { r=min(r,max(d[c],d[u0]-d[c])); if(c==s)break; c=pre[c]; } v.push_back(r); } } sort(v.begin(),v.end(),greater<int>()); int ans=res; if(v.size()>=2)ans=max(ans,v[0]+v[1]+t); if(v.size()>=3)ans=max(ans,v[1]+v[2]+2*t);

cout<&lt;ans;

}

Huy hiệu

Người dùng này không có huy hiệu nào.

«    »
CN
T2
T3
T4
T5
T6
T7
Ít
Nhiều

dựa trên nền tảng DMOJ | theo dõi VNOI trên Github và Facebook