记录编号 431292 评测结果 AAAAAAAAAA
题目名称 [USACO Dec05]清理牛棚 最终得分 100
用户昵称 GravatarFisher. 是否通过 通过
代码语言 C++ 运行时间 0.197 s
提交时间 2017-07-31 15:38:56 内存使用 2.65 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
inline int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
	return x*f;
}
const int maxn=86399;
int d[maxn+10];
int ok[maxn+10];
queue<int>duilie;
vector<int>g[maxn+10];
vector<int>w[maxn+10];
inline void spfa(int s){
	memset(d,0x3f3f3f3f,sizeof(d));
	d[s]=0;
	ok[s]=1;
	duilie.push(s);
	while(!duilie.empty()){
		int u=duilie.front();duilie.pop();
		for(int i=0;i<g[u].size();i++){
			int v=g[u][i];
			if(d[v]>d[u]+w[u][i]){
				d[v]=d[u]+w[u][i];
				if(!ok[v]){
					ok[v]=1;
					duilie.push(v);  
				} 
			}
		}
		ok[u]=0;
	} 
}
int m,from,to;
int main(){
	freopen("clean.in","r",stdin);
	freopen("clean.out","w",stdout);
	m=read();from=read();to=read();
	for(int i=1;i<=m;i++){
		int u=read(),v=read(),ww=read();
		g[u].push_back(v+1);
		w[u].push_back(ww); 
	}
	for(int i=to+1;i>=from;i--){
		g[i].push_back(i-1);
		w[i].push_back(0); 
	}
	spfa(from);
	if(d[to+1]!=0x3f3f3f3f)
		printf("%d\n",d[to+1]);
	else
		puts("-1");
	return 0;
}