78分求助
  • 板块P1807 最长路
  • 楼主Frank2010
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/8/23 18:26
  • 上次更新2023/11/3 01:41:56
查看原帖
78分求助
857735
Frank2010楼主2023/8/23 18:26

代码

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
int n,m,in[5005],f[5005];
vector<pair<int,int>>out[5005];
queue<int>inq;
int main(){
	scanf("%d%d",&n,&m);
	while(m--){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		out[u].push_back(make_pair(v,w));
		in[v]++;
	}
	for(int i=1;i<=n;i++){
		f[i]=-1;
		if(!in[i])inq.push(i);
	}
	f[1]=0;
	while(!inq.empty()){
		int u=inq.front();
		inq.pop();
		for(auto i:out[u]){
			in[i.first]--;
			f[i.first]=max(f[i.first],f[u]+i.second);
			if(!in[i.first])inq.push(i.first);
		}
	}
	printf("%d",f[n]);
	return 0;
}

测试点信息

测试点信息

2023/8/23 18:26
加载中...