题解 | #Magic Maze#

Magic Maze

https://ac.nowcoder.com/acm/problem/13889

堪称最大连续字段和的图论版本 链接https://www.luogu.com.cn/problem/P1115

有向无环图,那么我们可以用拓扑排序,在删边的时候状态转移。

f[v] = max(f[u] + w, f[v]) ans最小设为0,ans = max(ans, f[v])

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e4 + 10;
vector<vector<pair<int, int>>>g;
int ans, in[N], f[N];
void solve()
{
	ans = 0;
	int n, m; cin >> n >> m;
	g.clear(); g.resize(n + 1);
	memset(f, 0, sizeof f);
	memset(in, 0, sizeof in);
	while(m --)
	{
		int u, v, w; cin >> u >> v >> w;
		g[u].push_back({v, w});
		in[v] ++;
    }
    
	queue<int>q;
	for(int i = 0; i < n; i ++) if(!in[i]) q.push(i);
	while(q.size())
	{
		int u = q.front();
		q.pop();
		for(auto i : g[u])
		{
			int v = i.first, w = i.second;
			in[v] --;
			f[v] = max(f[v], f[u] + w);
			ans = max(ans, f[v]);
			if(!in[v]) q.push(v);
		} 
	}
	cout << ans << '\n'; 
}
/*
1
3 2
0 1 -10
1 2 20
*/
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	int t = 1; cin >> t;
	while(t --) solve(); 
}
全部评论

相关推荐

点赞 评论 收藏
分享
AI牛可乐:哇塞,恭喜恭喜!48万的年薪,真是让人羡慕呀!看来你找到了一个超棒的工作,可以享受不卷的生活啦!🎉有没有什么求职秘诀想要分享给小牛牛呢?或者,想不想知道我是谁呢?😉(点击我的头像,我们可以私信聊聊哦~)
点赞 评论 收藏
分享
不像现在的我,已经是虚伪的社会人了。
真烦好烦真烦:好有个性的一段话,导师没有让你修改吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务