Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
43269 _Yuyuyu_ 【J】T3 C++ 通过 100 559 MS 48180 KB 1232 2026-10-28 14:09:24

Tests(10/10):


#include<bits/stdc++.h> using namespace std; #define int long long int n,m; int a[200005]; vector<int>gp[200005]; int sum[200005],vis[200005],ssum[200005]; bool check(int mid){ queue<int>q; for(int i=1;i<=n;i++){ vis[i]=0; ssum[i]=sum[i]; if(sum[i]<=mid){ q.push(i); vis[i]=1; } } while(!q.empty()){ int qf=q.front(); q.pop(); for(auto it:gp[qf]){ if(vis[it])continue; ssum[it]-=a[qf]; if(ssum[it]<=mid){ q.push(it); vis[it]=1; } } } for(int i=1;i<=n;i++)if(!vis[i])return false; return true; } signed main(){ // freopen("del.in","r",stdin); // freopen("del.out","w",stdout); 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; gp[u].push_back(v); gp[v].push_back(u); } for(int i=1;i<=n;i++)for(auto it:gp[i])sum[i]+=a[it]; int l=1,r=1e18; while(l<r){ int mid=(l+r)>>1; if(check(mid))r=mid; else l=mid+1; } cout<<l; return 0; } /* 思路: */


测评信息: