差分约束,后4个点全WA
#include <bits/stdc++.h>
#define ll long long
using namespace std ;
ll i , n , ml , md , u , v , w , dis[10005] , cnt[10005] ;
bool f , vis[10005] ;
struct edge{
ll v , w ;
} ;
vector<edge> a[10005] ;
bool SPFA(){
memset(dis,0x3f,sizeof(dis)) ;
memset(vis,false,sizeof(vis)) ;
memset(cnt,0,sizeof(cnt)) ;
vis[1] = true ;
dis[1] = 0 ;
cnt[1] = 1 ;
queue<ll> q ;
q.push(1) ;
while(q.size()){
ll u = q.front() ;
q.pop() ;
vis[u] = false ;
for(ll i=0;i<a[u].size();i++) {
ll v = a[u][i].v , w = a[u][i].w ;
if(dis[v]>dis[u]+w) {
dis[v] = dis[u]+w ;
if (!vis[v]) {
cnt[v]++ ;
vis[v] = true ;
if(cnt[v]>n){
return true ;
}
q.push(v) ;
}
}
}
}
return false ;
}
int main(){
ios::sync_with_stdio(false) ;
cin.tie(0) ;
cout.tie(0) ;
cin >> n >> ml >> md ;
for(i=1;i<=ml;i++){
cin >> u >> v >> w ;
a[min(u,v)].push_back({max(u,v),w}) ;
}
for(i=1;i<=md;i++){
cin >> u >> v >> w ;
a[max(u,v)].push_back({min(u,v),-w}) ;
}
f = SPFA() ;
if(dis[n]==0x3f3f3f3f3f3f3f3f){
cout << -2 ;
}else {
if(f){
cout << -1 ;
}else {
cout << dis[n] ;
}
}
return 0 ;
}