蒟蒻67分求助!!!
  • 板块P1807 最长路
  • 楼主StObOtZ
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/7/13 10:03
  • 上次更新2023/11/4 14:57:16
查看原帖
蒟蒻67分求助!!!
188104
StObOtZ楼主2021/7/13 10:03
#include<bits/stdc++.h>
#define int long long
using namespace std;
priority_queue<pair<int, int>, vector<pair<int, int> > > heap;
int k,t[50005],h[1555],r[50005],u[50005],d[1555],p[1555],s[1555];
inline int read(){
	int x=0,m=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') m=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		x=x*10+ch-48;
		ch=getchar();
	}
	return x*m;
}
inline void write(int x){
	if(x < 0){
		putchar('-');
		write(-x);
		return;
	}
	if(x>=10) write(x/10);
	putchar(x%10+'0');
}
signed main(){
	int n=read(),m=read();
	for (int i=1;i<=m;i++){
		int x=read(),y=read(),z=read();
		k++;
		t[k]=h[x];
		h[x]=k;
		r[k]=y;
		u[k]=z+100005;
	}
	d[1]=0;
	p[1]=true;
	s[1]=0;
	heap.push(make_pair(0,1));
	while(!heap.empty()){
		pair<int, int> Max=heap.top();
		heap.pop();
		int v=Max.second;
		if(d[v]!=Max.first) continue;
		int x=h[v];
		while(x){
			if(d[r[x]]<d[v]+u[x]){
				d[r[x]]=d[v]+u[x];
				s[r[x]]=s[v]+1;
				p[r[x]]=true;
				heap.push(make_pair(d[r[x]],r[x]));
			}
			x=t[x];
		}
	}
	if (!p[n]) write(-1);
		else write(d[n]-s[n]*100005);
}
2021/7/13 10:03
加载中...