提交时间:2026-10-28 15:47:57
运行 ID: 43326
#include <bits/stdc++.h> #define int long long using namespace std; const int N=2e5+5; int n,m,sum,a[N],s[N],t[N]; vector<int>g[N]; bool vis[N]; bool check(int mid){ queue<int>q; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++){ t[i]=s[i]; if (s[i]<=mid){ q.push(i); vis[i]=1; } } while(!q.empty()){ int u=q.front(); q.pop(); for (auto v:g[u]){ t[v]-=a[u]; if (t[v]<=mid&&vis[v]==0){ vis[v]=1; q.push(v); } } } for(int i=1;i<=n;i++)if(!vis[i]) return 0; return 1; } signed main(){ cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=0;i<m;i++){ int u,v;cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } for(int i=1;i<=n;i++)for(auto j:g[i])s[i]+=a[j]; int l=0,r=1e18; while(l<r){ int mid=(l+r)>>1; if(check(mid))r=mid; else l=mid+1; } cout<<r; return 0; }