推导部分和-图论+dfs+连通块

先研究一下,感觉有点像lca里的树上前缀和,不过树有多颗,用color区分一下

https://www.luogu.com.cn/problem/P8779

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef  long long ll;
typedef pair<int,int> pii;
int n,k,m,cnt;
typedef struct edge
{
	int v;
	ll w;
}edge ;
vector<edge> mp[N];
int color[N];
ll pre_sum[N];///前缀和 
void dfs(int u,ll d,int cnt)///树上前缀和的思路,color标记不同的树 
{
	pre_sum[u]=d;
	color[u]=cnt;
	for(auto a:mp[u])
	{
		int v=a.v;
		ll w=a.w;
		if(color[v]) continue;
		dfs(v,d+w,cnt);
	}
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m>>k;
    for(int i=0;i<m;i++)
    {
    	int u,v;
    	ll w;
    	cin>>u>>v>>w;
    	mp[u-1].push_back({v,w});///0-5时正的 
    	mp[v].push_back({u-1,-1*w});///5-0是负的 
	}
	
	for(int i=1;i<=n;i++)
	{
		if(!color[i])
		{
			dfs(i,0,++cnt); ///Color来标记和区分不同树 
		}
	}
	while(k--)
	{
		int l,r;
		cin>>l>>r;
		if(color[l-1]!=color[r]) cout<<"UNKNOWN"<<endl;///不在同一棵树 
		else
		{
			cout<<pre_sum[r]-pre_sum[l-1]<<endl;///区间和用树上前缀和来求 
		}
	}
    return 0;
}
相关推荐
通信小呆呆4 小时前
电子战抗干扰技术:当“不被干扰”成为一种系统
算法·通信·mimo·isac
笑容掩饰我的失落4 小时前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
Severus_black5 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
2601_967979127 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔7 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆8 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac
老师我太想进步了20268 小时前
【数据结构-6】算法美学之单链表(1)
数据结构·算法
希望我万事顺遂9 小时前
力扣hot100-滑动窗口最大值
数据结构·算法·leetcode
꧁细听勿语情꧂10 小时前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫10 小时前
【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱
数据结构·算法·leetcode