# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1222028 | TVSown | Dreaming (IOI13_dreaming) | C++20 | 0 ms | 0 KiB |
///*** Sown_Vipro ***///
/// ->TEAM SELECTION TEST<- ///
#include<bits/stdc++.h>
using namespace std;
//#pragma GCC optimize ("O3")
//#pragma GCC optimize ("unroll-loops")
//#pragma GCC target("popcnt")
#define F first
#define S second
#define pb push_back
#define pi pair<int, int>
#define pii pair<int, pair<int, int> >
#define FOR(i, a, b) for(int i = a; i <= b; ++i)
#define REP(i, a, b) for(int i = a; i >= b; --i)
#define all(s) s.begin(), s.end()
#define szz(s) int(s.size())
const string NAME = "sown";
const int N = 1e6 + 5, MAX = 1e6, oo = 1e9 + 5, MOD = 1e9 + 7;
void maxi(int &x, int y){ if(x < y) x = y; }
void mini(int &x, int y){ if(x > y) x = y; };
void add(int &x, int y){ x += y; x += MOD * (x < 0); x -= MOD * (x >= MOD); };
int n, m, l;
vector<pi> e[N];
int mx1, mx2, mi;
int in[N], in2[N], out[N], vst[N];
void dfs(int u, int p){
vst[u] = 1;
for(auto [v, w] : e[u]){
if(v == p) continue;
dfs(v, u);
if(in[v] + w > in[u]){
in2[u] = in[u];
in[u] = in[v] + w;
}else if(in[v] + w > in2[u]){
in2[u] = in[v] + w;
}
}
}
void dfs2(int u, int p){
// cout << u << " " << in[u] << " " << out[u] << "\n";
mi = min(mi, in[u] + out[u]);
for(auto [v, w] : e[u]){
if(v == p) continue;
out[v] = out[u] + w;
if(in[v] + w == in[u]) out[v] = max(out[v], in2[u] + w);
else out[v] = max(out[v], in[u] + w);
dfs2(v, u);
}
}
void solve(){
cin >> n >> m >> l;
FOR(i, 1, m){
int u, v, w; cin >> u >> v >> w;
e[u].pb({v, w});
e[v].pb({u, w});
}
FOR(u, 1, n){
if(!vst[u]){
dfs(u, 0);
mi = oo;
dfs2(u, 0);
if(mi > mx1){
mx2 = mx1;
mx1 = mi;
}else if(mi > mx2){
mx2 = mi;
}
}
}
cout << mx1 + mx2 + l * (mx2 > 0);
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int t = 1;
// cin >> t;
while(t--){
solve();
}
}