CE求改
  • 板块灌水区
  • 楼主hjqhs
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/8/9 13:13
  • 上次更新2024/8/9 14:29:42
查看原帖
CE求改
724988
hjqhs楼主2024/8/9 13:13
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define rep(i, a, b) for(int i = (a); i <= (b); ++ i)
#define per(i, a, b) for(int i = (a); i >= (b); -- i)
typedef long long ll;
typedef unsigned long long ull;
const int N = 2e5 + 5;
const int INF = 0x3f3f3f3f;
int n, m, dis1[N], dis[N][2], st, ed, dlen = -INF, ans = -INF;
bool vis[N];
struct edge {
	int to, we;
};
vector<edge> g[N];
int bfs(int x) {
	int pt;
	memset(dis1, 0, sizeof(dis1));
	memset(vis, 0, sizeof(vis));
	queue<int> q; q.push(x); vis[x] = true;
	while(!q.empty()) {
		int u = q.front(); q.pop();
		for(int i = 0; i < (int)g[u].size(); ++ i) {
			int v = g[u][i].to, w = g[u][i].we;
			if(!vis[v]) {
				q.push(v); vis[v] = true;
				dis1[v] = min(dis1[v], dis1[u] + w);
			}
		}
	}
	rep(i, 1, n) if(dis1[i] >= dlen) dlen = dis1[i], pt = i;
	return pt;
}
void dfs(int u, int fa, int type) {
	for(int i = 0; i < (int)g[u].size(); ++ i) {
		int v = g[u][i].to, w = g[u][i].we;
		if(v != fa) {
			dis[v][type] = min(dis[v][type], dis[u][type] + w);
			dfs(v, u, type);
		}
	}
}
void solve() {
	cin >> n >> m;
	rep(i, 1, m) {
		int u, v, w; cin >> u >> v >> w;
		g[u].emplace_back(v), g[v].emplace_back(u);
	}
	st = bfs(1), ed = bfs(st);
	dfs(st, 0, 0), dfs(ed, 0, 1);
	rep(i, 1, n) ans = max(ans, min(dis[i][0], dis[i][1]));
	ans += dlen; cout << ans;
	return;
}
signed main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int T = 1;
	// cin >> T;
	while(T --) solve();
	return 0;
}
2024/8/9 13:13
加载中...