显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
bool in[maxn];
struct road{int to,next,v;
}a[maxn*3];
int r[maxn],head[maxn],tot,dis[maxn];
int n,l,u,q,w,e;
void add(int x,int y,int z){tot++;
a[tot].to=y;
a[tot].v=z;
a[tot].next=head[x];
head[x]=tot;}
void spfa(int x){
dis[x]=0;
queue<int> q;
q.push(x);
in[x]=1;
while(!q.empty()){
int qwq=q.front();q.pop();
in[qwq]=0;
for(int i=head[qwq];i;i=a[i].next){
if(dis[a[i].to]>dis[qwq]+a[i].v){
dis[a[i].to]=dis[qwq]+a[i].v;
if(in[a[i].to]==0){
in[a[i].to]=1;
r[a[i].to]++;
q.push(a[i].to);
if(r[a[i].to]>n+5){
cout<<-1;return;}}}}}
//if(dis[n]<0){cout<<-1;return;} \
if(dis[n]==99999999){cout<<-2;return;}
cout<<dis[n];return;
}
int main(){
ios::sync_with_stdio(false);
//freopen("layout.in", "r", stdin);
// freopen("layout.out", "w", stdout);
for(int i=1;i<=maxn;i++)dis[i]=99999999;
cin>>n>>l>>u;
for(int i=1;i<=l;i++){
cin>>q>>w>>e;
add(q,w,e);}
for(int i=1;i<=u;i++){
cin>>q>>w>>e;
add(w,q,-e);}
for(int i=n;i>=2;i--)
add(i,i-1,0);
spfa(1);
return 0;
}