提交时间:2026-10-28 14:39:23

运行 ID: 43289

#include <bits/stdc++.h> using namespace std; int n,m,mx,a[200005],pt[200005],st[200005],vis[200005]; vector <int> g[200005]; bool check(int x){ queue <int> q; fill(vis,vis+n+1,0); for(int i=1;i<=n;++i) st[i]=pt[i]; for(int i=1;i<=n;++i) if(st[i]<=x) q.push(i),vis[i]=1; while(!q.empty()){ int now=q.front(); vis[now]=1; q.pop(); for(auto p:g[now]){ if(vis[p]) continue; else if(st[p]-a[now]<=x) q.push(p); st[p]-=a[now]; } } for(int i=1;i<=n;++i) if(!vis[i]) return 0; return 1; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=n;++i) cin>>a[i]; for(int i=1;i<=m;++i){ int u,v; cin>>u>>v; g[u].emplace_back(v),g[v].emplace_back(u); pt[u]+=a[v],pt[v]+=a[u]; } for(int i=1;i<=n;++i) mx=max(mx,pt[i]); int l=0,r=mx; while(l<r){ int mid=(l+r)>>1; if(check(mid)) r=mid; else l=mid+1; } cout<<l; return 0; }