ABC 373

D. Hidden Weights

(1)不同连通块不会产生影响,每个连通块各自处理

(2)有向图是没法 dfs 的,任选一个为起点,那么走向这个起点的点所在子图就遍历不到,所以第一步先把无向图改为有向图:u ---> v 边权 w 等价于 v ---> u 边权 - w。每次加边同时加反向负边

(3)对每个连通块,任意一个起点,点权设为 0,然后往外推。v - u = w 就是 v = u + w

复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 5, INF = 1e18;

struct node
{
	int v, w;
};

int T, n, m, ans[N], vis[N];
vector<node> G[N];

void dfs(int u)
{
	vis[u] = 1;
	for (auto x : G[u])
	{
		int v = x.v, w = x.w;
		if (vis[v] == 0)
		{
			ans[v] = ans[u] + w;
			dfs(v);
		}
	}
}

signed main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i ++)
	{
		int u, v, w;
		cin >> u >> v >> w;
		G[u].push_back({v, w}), G[v].push_back({u, -w});
	}
	for (int i = 1; i <= n; i ++)
		if (vis[i] == 0)
		{
			ans[i] = 0;
			dfs(i);
		}
	for (int i = 1; i <= n; i ++)
		cout << ans[i] << ' ';
	return 0;
}
相关推荐
大闲在人10 分钟前
7. 供应链与制造过程术语:“周期时间”
算法·供应链管理·智能制造·工业工程
小熳芋13 分钟前
443. 压缩字符串-python-双指针
算法
Charlie_lll23 分钟前
力扣解题-移动零
后端·算法·leetcode
chaser&upper24 分钟前
矩阵革命:在 AtomGit 解码 CANN ops-nn 如何构建 AIGC 的“线性基石”
程序人生·算法
weixin_4997715532 分钟前
C++中的组合模式
开发语言·c++·算法
iAkuya1 小时前
(leetcode)力扣100 62N皇后问题 (普通回溯(使用set存储),位运算回溯)
算法·leetcode·职场和发展
近津薪荼1 小时前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck1 小时前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
松☆1 小时前
CANN与大模型推理:在边缘端高效运行7B参数语言模型的实践指南
人工智能·算法·语言模型
java干货1 小时前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法