99572024-03-21 18:01:46111Erőművekcpp17Hibás válasz 0/100101ms47132 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
#ifdef CB
	freopen("be2.txt","r",stdin);
//	freopen("out.txt","w",stdout);
#endif
	int N,M;
	cin>>N>>M;
	vector<int>v(N+1);
	int su=0;
	for(int i=1;i<=N;i++){
		cin>>v[i];
		su+=v[i];
	}
	vector<vector<int>>g(N+1);
	for(int i=0;i<M;i++){
		int a,b;
		cin>>a>>b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	int ans=INT_MAX;
	vector<int>l(N+1,INT_MAX),a(N+1,0);
	vector<int>s(N+1);
	vector<set<int>>z(N+1);
	auto dfs=[&](auto self,int i)->void{
		for(int j:g[i]){
			if(l[j]==l[i]-1){
				continue;
			}
			if(l[j]!=INT_MAX){
				if(l[j]<l[a[i]]){
					a[i]=j;
				}
				continue;
			}
			l[j]=l[i]+1;
			self(self,j);
			if(l[a[j]]<l[a[i]]){
				a[i]=a[j];
			}
			if(l[a[j]]>l[i]){
				z[i].insert(s[j]);
				int s1=su-s[j],s2,s3;
				auto it=z[j].lower_bound(s[j]/2);
				if(it!=z[j].end()){
					s2=*it;
					s3=su-s1-s2;
					ans=min(ans,max({s1,s2,s3})-min({s1,s2,s3}));
				}
				if(it!=z[j].begin()){
					--it;
					s2=*it;
					s3=su-s1-s2;
					ans=min(ans,max({s1,s2,s3})-min({s1,s2,s3}));
				}
				if(!z[j].empty()){
					s2=*s.begin();
					s3=su-s1-s2;
					ans=min(ans,max({s1,s2,s3})-min({s1,s2,s3}));
					s2=*--s.end();
					s3=su-s1-s2;
					ans=min(ans,max({s1,s2,s3})-min({s1,s2,s3}));
				}
			}
			s[i]+=s[j];
			if(z[j].size()>z[i].size()){
				swap(z[i],z[j]);
			}
			z[i].insert(z[j].begin(),z[j].end());
		}
		s[i]+=v[i];
	};
	l[1]=0;
	dfs(dfs,1);
//	for(int i=1;i<=N;i++){
//		cout<<i<<" : "<<l[i]<<" "<<a[i]<<" "<<s[i]<<endl;
//	}
	cout<<ans<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/100
1Hibás válasz0/03ms1832 KiB
2Hibás válasz0/04ms3352 KiB
3Hibás válasz0/53ms2524 KiB
4Hibás válasz0/53ms2748 KiB
5Hibás válasz0/53ms3208 KiB
6Hibás válasz0/53ms3184 KiB
7Hibás válasz0/56ms4744 KiB
8Hibás válasz0/56ms4552 KiB
9Hibás válasz0/59ms6676 KiB
10Hibás válasz0/58ms6920 KiB
11Hibás válasz0/626ms14552 KiB
12Hibás válasz0/623ms14412 KiB
13Hibás válasz0/643ms23148 KiB
14Hibás válasz0/637ms22656 KiB
15Hibás válasz0/664ms32120 KiB
16Hibás válasz0/652ms31464 KiB
17Hibás válasz0/679ms39536 KiB
18Hibás válasz0/667ms38812 KiB
19Hibás válasz0/6101ms47132 KiB
20Hibás válasz0/679ms46396 KiB