对于k=0的45分暴力WA了,求HACK
查看原帖
对于k=0的45分暴力WA了,求HACK
357311
little_cindy楼主2022/10/29 21:11

RT

#include<bits/stdc++.h>
using namespace std;
template<class T>void read(T &x){
	x=0;
	T f=1;
	char ch=getchar();
	while(ch<'0'||'9'<ch){
		if(ch=='-'){
			f=-1;
		}
		ch=getchar();
	}
	while('0'<=ch&&ch<='9'){
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	x=x*f;
	return;
}
template<class T,class ...Arg>void read(T &x,Arg &...arg){
	read(x);
	read(arg...);
	return;
}
template<class T>void write(T x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x<10){
		putchar(x+48);
	}
	else{
		write(x/10);
		putchar(x%10+48);
	}
	return;
}
void f(string a){
	freopen((a+".in").c_str(),"r",stdin);
	freopen((a+".out").c_str(),"w",stdout);
	return;
}
const int maxn=2505;
int n,m,k;
int h[maxn];
int ans;
vector<int> nbr[maxn];
int dp[maxn];
vector<int>jian[maxn];
bool g[maxn][maxn];
int lb(int j,int x){
	int l=-1,r=jian[j].size();
	while(l+1<r){
		int mid=(l+r)>>1;
		if(jian[j][mid]<=x){
			l=mid;
		}
		else{
			r=mid;
		}
	}
	return max(l,0);
}
int ub(int j,int x){
	int l=-1,r=jian[j].size();
	while(l+1<r){
		int mid=(l+r)>>1;
		if(jian[j][mid]>=x){
			r=mid;
		}
		else{
			l=mid;
		}
	}
	return min(r,(int)jian[j].size()-1);
}
int main(){
	read(n,m,k);
	for(int i=2;i<=n;i++)read(h[i]);
	for(int i=1;i<=m;i++){
		int u,v;
		read(u,v);
		nbr[u].push_back(v);
		nbr[v].push_back(u);
		g[u][v]=g[v][u]=1;
	}
//	if(k==0){
		for(int i=0;i<nbr[1].size();i++){
			int nxt1=nbr[1][i];
			for(int j=0;j<nbr[nxt1].size();j++){
				int nxt2=nbr[nxt1][j];
				if(nxt2==1)continue;
				// printf("nxt1=%d nxt2=%d\n",nxt1,nxt2);
				if(h[nxt2]+h[nxt1]>dp[nxt2]){
					dp[nxt2]=h[nxt1]+h[nxt2];
					jian[nxt2].clear();
				}
				if(dp[nxt2]==h[nxt1]+h[nxt2]){
					jian[nxt2].push_back(nxt1);
				}
			}
		}
		for(int i=2;i<=n;i++){
			if(jian[i].size()==0)continue;
			for(int j=i+1;j<=n;j++){
				if(!g[i][j]||jian[j].size()==0)continue;
				if(jian[i].size()==1){
					if(jian[j].size()==1&&jian[i][0]==jian[j][0])continue;
                    if(jian[i][0]==j||jian[j][0]==i&&jian[j].size()==1)continue;
					ans=max(ans,dp[i]+dp[j]);
				}
			}
		}
		cout<<ans<<endl;
//	}
//	else{
//		
//	}
	return 0;
}
2022/10/29 21:11
加载中...