78拓补就是不知道哪里错了!
查看原帖
78拓补就是不知道哪里错了!
550074
cloudemakers楼主2023/2/15 13:48
#include<bits/stdc++.h>
#define maxn 1600
using namespace std;
int n,m,r[maxn][maxn],f[maxn],u,v,w,in[maxn],flag,del[maxn];
vector<int> a[maxn];
queue<int> q;
void dele(int p){
	for (int i=0;i<a[p].size();i++){
		in[a[p][i]]--;
		if (in[a[p][i]]==0) dele(a[p][i]);
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for (int i=1;i<=m;i++){
		scanf("%d%d%d",&u,&v,&w);
		if (w>r[u][v]||r[u][v]==0) r[u][v]=w;
		in[v]++;//入度 
		a[u].push_back(v);
	}
	for (int i=2;i<=n;i++) if(in[i]==0){dele(i);}//删掉所有入度为0的点 
	q.push(1);//从1开始遍历 
	while(!q.empty()){
		int tem=q.front();
		q.pop();
		for (int i=0;i<a[tem].size();i++){
			in[a[tem][i]]--;
			if (in[a[tem][i]]==0) q.push(a[tem][i]);
			f[a[tem][i]]=max(f[a[tem][i]],f[tem]+r[tem][a[tem][i]]);
		}
	}
	if (f[n]==0) cout<<-1;
	else printf("%d",f[n]);
}

2023/2/15 13:48
加载中...