91分 WA on #2 求条
查看原帖
91分 WA on #2 求条
593445
Serendipitous楼主2025/7/22 17:06
#include <bits/stdc++.h>
using namespace std;
 
#define LL long long
#define pii pair<int, int>
#define For(a, b, c) for(int a = b; a <= c; a++)
#define Ror(a, b, c) for(int a = b; a >= c; a--)
const int N = 5e4 + 5, M = 2e5 + 5;

int n,m;
int rd[N], ans[N];
queue<int>q;
vector<pii> e[N];
bool vis[N];
//用来标记是否可以从1走到这个点
//因为是1到n,所以如果不能从1开始走
//说明不满足条件,没有这条最长路

void toop(){
	For(i, 1, n)
		if(rd[i]==0) q.push(i);
	while(!q.empty()) {
		int u = q.front();
		q.pop();
		for(auto x : e[u]) {
			int v = x.first, w = x.second;
			rd[v]--; //入度-- 
			if(vis[u] == true){ //如果这个节点能从1走到,说明它的边可以走, 更新最长路 
				ans[v] = max(ans[v], ans[u] + w);
				vis[v] = true;
			}
			if(rd[v] == 0) q.push(v); //进队 
		}
	}
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
	cin >> n >> m;
	For(i, 1, m) {
		int u, v, w;
		cin >> u >> v >> w;
		e[u].emplace_back(v, w);
		rd[v]++;
	} //建边,入度++ 
	vis[1] = true; //1肯定自己能走
	ans[n] = -1e9; //初始值为-1,方便输出
	toop(); //拓扑排序求最长路
	if(ans[n] != -1e9) cout << ans[n];
    else cout << -1;
	return 0;
}
2025/7/22 17:06
加载中...