Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
43288 范墨涵 【J】T3 C++ 通过 100 666 MS 47200 KB 1092 2026-10-28 14:37:53

Tests(10/10):


#include<bits/stdc++.h> using namespace std; #define int long long const int N = 2e5+10; int n,m; vector <int> v[N]; int a[N],s[N],t[N]; bool vis[N]; bool check(int mid){ memset (vis,false,sizeof(vis)); queue <int> q; for (int i=1;i<=n;i++){ t[i]=s[i]; if (s[i]<=mid){ q.push(i); vis[i]=true; } } while (!q.empty()){ int u=q.front(); q.pop(); for (int i:v[u]){ t[i]-=a[u]; if (t[i]<=mid and vis[i]==false){ q.push(i); vis[i]=true; } } } for (int i=1;i<=n;i++){ if (vis[i]==false) 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 x,y; cin >> x >> y; v[x].push_back(y); v[y].push_back(x); } for (int i=1;i<=n;i++){ for (int j:v[i]){ s[i]+=a[j]; } } // for (int i=1;i<=n;i++) cout << s[i] << " "; int l=1,r=1e18; while (l<r){ int mid=(l+r)>>1; if (check(mid)==true) r=mid; else l=mid+1; } cout << l; return 0; }


测评信息: