91pts拓扑求调
查看原帖
91pts拓扑求调
878137
_QWQ__QWQ_楼主2024/1/6 08:59

rt,交了30多发,每次都是第二个点wa,有没有好人帮忙看一下。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e6+5;
struct Node{
	int to,value;
};
int in[maxn];
int n,k,m,u,v,w,s[maxn],ans[maxn];
vector<Node>vt[maxn];
vector<int>edge;
void relax(){
	queue<int>q;
	for(int i=2;i<=n;i++){
		if(in[i]==0){
			q.push(i);
		}
	}
	while(!q.empty()){
		int x=q.front();
		q.pop();
		for(int i=0;i<vt[x].size();i++){
			int v=vt[x][i].to;
			in[v]--;
			if(in[v]==0){
				q.push(v);
			}
		}
	}
}
void top_sort(){
	queue<int>q;
	q.push(1);
	relax();
	while(!q.empty()){
		int x=q.front();
		q.pop();
		edge.push_back(x);
		for(int i=0;i<vt[x].size();i++){
			int v=vt[x][i].to;
			int w=vt[x][i].value;
			in[v]--;
			ans[v]=max(ans[v],ans[x]+w);
			if(in[v]==0){
				q.push(v);
			}
		}
	}
	if(ans[n]!=0){
		cout<<ans[n];
	}
	else{
		cout<<-1;
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		vt[u].push_back({v,w});
		in[v]++;
	}
	top_sort();
	return 0;
}
2024/1/6 08:59
加载中...