提交时间:2026-10-28 14:53:52

运行 ID: 43291

#include <bits/stdc++.h> using namespace std; const int N=2e5+9; long long n,m,b[N],c[N],t[N],l,r=1e18; bool v[N]; vector<long long>a[N]; bool ch(long long x){ queue<long long>q; for(int i=1;i<=n;i++){ v[i]=0; t[i]=c[i]; if(t[i]<=x){ q.push(i); v[i]=1; } } while(!q.empty()){ long long u=q.front(); q.pop(); for(auto i:a[u]){ t[i]-=b[u]; if(t[i]<=x&&v[i]==0){ q.push(i); v[i]=1; } } } for(int i=1;i<=n;i++)if(v[i]==0)return 0; return 1; } int main(){ cin>>n>>m; for(int i=1;i<=n;i++)cin>>b[i]; for(int i=1;i<=m;i++){ int t1,t2;cin>>t1>>t2; a[t1].push_back(t2);a[t2].push_back(t1); c[t1]+=b[t2];c[t2]+=b[t1]; } while(l<r){ long long mid=(l+r)/2; if(ch(mid)==1)r=mid; else l=mid+1; } cout<<r; return 0; }