前三大bfs求助85分WA
查看原帖
前三大bfs求助85分WA
304524
崔化博楼主2022/11/5 15:36
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#include <cstring>
#include <queue>
#include <algorithm>
#define N 2505
using namespace std;
int n,m,k,siz[N];
bool vis[N][N],e[N];
long long val[N];
vector<int> mp[N];
struct node{
	long long val;
	int num;
	bool operator <(const node &b)const{
		return val>b.val;
	}
}zui[N][3],lin[N];
queue<node> l;
int main() {
//	freopen("holiday.in","r",stdin);
//	freopen("holiday.out","w",stdout);
	scanf("%d%d%d",&n,&m,&k);
	for(int i=2;i<=n;++i){
		scanf("%lld",&val[i]);
	}
	while(m--){
		int u,v;
		scanf("%d%d",&u,&v);
		mp[u].push_back(v);
		mp[v].push_back(u);
	}
	for(int i=1;i<=n;++i){
		memset(e,0,sizeof(e));
		l.push((node){
			i,0
		});
		while(!l.empty()){
			node p=l.front();
			vis[i][p.val]=1;
			l.pop();
			if(p.num>k||e[p.val])
				continue;
			e[p.val]=1;
			for(int i=0;i<mp[p.val].size();++i){
				l.push((node){
					mp[p.val][i],p.num+1
				});
			}
		}
		vis[i][i]=0;
	}
	for(int j=1;j<=n;++j){
		int last=0;
		for(int i=1;i<=n;++i){
			if(vis[1][i]&&vis[i][j]){
				lin[++last]=(node){
					val[i],i
				};
//				cout<<i<<' '<<j<<'\n';
			}
		}
		siz[j]=min(3,last);
//		cout<<"eee:";
		if(siz[j]>0){
		
		nth_element(lin+1,lin+2,lin+last+1);
		zui[j][0]=lin[1];}
//		cout<<lin[1].num<<' ';
		if(siz[j]>1){
		
		nth_element(lin+1,lin+3,lin+last+1);
		zui[j][1]=lin[2];}
//		cout<<lin[2].num<<' ';
		if(siz[j]>2){
		
		nth_element(lin+1,lin+4,lin+last+1);
		zui[j][2]=lin[3];}
//		cout<<lin[3].num<<'\n';
	}
	long long maxn=0;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			if(i==j||(!vis[i][j]))continue;
			for(int k1=0;k1<siz[i];++k1){
				for(int k2=0;k2<siz[j];++k2){
					int p1=zui[i][k1].num,p2=zui[j][k2].num;
//					cout<
					if(p1!=j&&p1!=p2&&p2!=i){
						maxn=max(maxn,val[i]+val[j]+val[p1]+val[p2]);
//						cout<<i<<" "<<j<<" "<<p1<<' '<<p2<<' '<<val[i]+val[j]+val[p1]+val[p2]<<'\n';
					}
				}
			}
		}
	}
	printf("%lld",maxn);
    return 0;
}
/*
5 8 3 2
1->3->5->8->2->1
*/
2022/11/5 15:36
加载中...