题意: 解法: 显然距离是固定的,那么问题只在于判断是否有解. 设每个人是从s到t, 统计每个点的入度和出度,如果所有点的入度=出度, 那么说明图中出现若干个有向环,此时一定有解,否则无解. code: #include<bits/stdc++.h> #define int long long using namespace std; const int maxm=2e6+5; int in[maxm],out[maxm]; int s[maxm],t[maxm]; int x[maxm]; int n,m; void solve(){ cin>>n>>m; for(int i=1;i<=n;i++){ cin>>x[i]; } int ans=0; for(int i=1;i<=m;i++){ cin>>s[i]>>t[i]; ans+=abs(x[s[i]]-x[t[i]]); } for(int i=1;i<=n;i++){ in[i]=out[i]=0; } for(int i=1;i<=m;i++){ out[s[i]]++; in[t[i]]++; } int ok=1; for(int i=1;i<=n;i++){ if(in[i]!=out[i]){ ok=0; } } if(!ok)ans=-1; cout<<ans<<endl; } signed main(){ freopen("bugged.in","r",stdin); ios::sync_with_stdio(0);cin.tie(0); int T;cin>>T; while(T--){ solve(); } return 0; }