Layout G 70pts
查看原帖
Layout G 70pts
1069308
lzy120406楼主2024/9/30 21:40

差分约束,后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 ;
}
2024/9/30 21:40
加载中...