当前位置: 首页 > article >正文

洛谷 AT_abc373_d [ABC373D] Hidden Weights 题解

题目大意

有一个有 N N N 个点 M M M 条边的有向图,第 i i i 条边由 u i u_i ui v i v_i vi,权值为 w i w_i wi

需要你对图中的每个节点填上一个介于 − 1 0 18 -10^{18} 1018 1 0 18 10^{18} 1018 之间的整数,使得满足以下条件:

  • 如果 x i x_i xi 为第 i i i 个点的值,则对于任意的一个 j ∈ [ 1 , M ] j\in[1,M] j[1,M],满足 x v j − x u j = w j x_{v_j}-x_{u_j}=w_j xvjxuj=wj

保证题目有解,该图不一定连通

题目思路

不妨可以先假定该图连通,那么可以以任意一个点为起点出发,设该点数值为 0 0 0,再进行 dfs 求值。由于 N ≤ 2 × 1 0 5 , ∣ w i ∣ ≤ 1 0 9 N\le2\times10^5,|w_i|\le10^9 N2×105,wi109,所以每个节点的值都属于区间 [ − 2 × 1 0 14 , 2 × 1 0 14 ] [-2\times10^{14},2\times10^{14}] [2×1014,2×1014],并不会爆 long long

但我们现在要计算的图不一定连通,但可以将其分为多个连通子图进行求值,由此,即可达到对全图求值的目的。

Code

#include <iostream>
#define int long long
using namespace std;
int n, m, u, v, w[200001], ans[200001];
int nxt[200001], head[200001], to[200001], tot;
int nxt1[200001], head1[200001], to1[200001];
bool flag[200001];
void dfs(int u, int sum) {//搜索
	if (flag[u]) return;//若已经搜索过则跳过
	flag[u] = true;//标记为已搜索
	ans[u] = sum;//更新值
	for (int i = head[u]; i; i = nxt[i]) dfs(to[i], sum + w[i]);//枚举以该点出发的边
	for (int i = head1[u]; i; i = nxt1[i]) dfs(to1[i], sum - w[i]);//枚举以该点为终点的边
}
void add() {//链式前向星
	to[tot] = v;
	nxt[tot] = head[u];
	head[u] = tot;
	to1[tot] = u;//反向存储一遍
	nxt1[tot] = head1[v];
	head1[v] = tot;
}
signed main() {
	ios::sync_with_stdio(false), cin.tie(), cout.tie();
	cin >> n >> m;
	for (tot = 1; tot <= m; ++tot) {
		cin >> u >> v >> w[tot];
		add();
	}
	for (int i = 1; i <= n; ++i) if (!flag[i] && head[i]) dfs(i, 0);//如果有连边且为访问过则进行 dfs
	for (int i = 1; i <= n; ++i) cout << ans[i] << " ";
	return 0;
}

祝各位 AK CSP


http://www.kler.cn/news/357750.html

相关文章:

  • 019_基于python+django食品销售数据分析系统2024_4032ydxt
  • cpp详解:string
  • 基于单片机的 16 键多功能电子琴硬件设计
  • 人工智能公司未达到欧盟人工智能法案标准
  • Sentinel 快速入门
  • 网络安全有关法律法规
  • SpringBoot民宿预订系统设计与实现
  • LeetCode714:买卖股票的最佳时机含手续费
  • 深度学习基础知识-02 数据预处理
  • 生成式对抗网络 (GAN) |简介
  • 1.2.3 TCP IP模型
  • uniapp中使用lottie实现JSON动画
  • 大数问题python解决合集(个人总结)
  • OpenAI若造出AGI,就能从微软独立:股权争夺战开打,两边都找好了投行
  • 第13篇:无线与移动网络安全
  • h2数据库模拟mysql进行单元测试遇到的问题
  • 运维软件:监控易如何助力运维团队跨越数据整合与分析的鸿沟
  • 科研绘图系列:R语言突出强调部分的饼图(pie plot)
  • 黑马程序员Java笔记整理(day02)
  • 如何复制任意网页上的文字——飞书、知乎、小红书通通拿下!