只WA了Subtask1的第17个点,求调!
查看原帖
只WA了Subtask1的第17个点,求调!
1159924
yanzhouyehaojun楼主2024/8/23 21:09
#include<bits/stdc++.h>
using namespace std;
#define re register unsigned int 
#define ll long long
char buf[1<<20],*p1,*p2;
#define gc() (p1==p2 && (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1==p2) ? EOF : *p1++)
template <typename T>inline void read(T &x) {
	T w=1;
	x=0;
	char c=gc();
	while(!isdigit(c)) {
		(c=='-')?w=-w:w;
		c=gc();
	}
	while(isdigit(c)) {
		x=(x<<1)+(x<<3)+(c^48);
		c=gc();
	}
	x=x*w;
}
struct edge {
	int to,nxt,from;
} e[20100];
long long a[2510],head[5010],n,m,k,num,uu,vv,ans[2510][10005],tmp[2510][10005],dis[2510][10005],mx=-9223372036854775807;
void add(ll u,ll v) {
	e[++num].nxt=head[u];
	e[num].from=u;
	e[num].to=v;
	head[u]=num;
}
queue <ll>q;
void dij(ll x) {
	dis[x][x]=0;
	q.push(x);
	while(!q.empty()) {
		ll u=q.front();
		q.pop();
		for(re i=head[u]; i; i=e[i].nxt) {
			ll tmp=e[i].to;
			if(dis[x][tmp]==0x7fffffffffffffff) {
				dis[x][tmp]=dis[x][u]+1;
				q.push(tmp);
			}
		}
	}
}
int main() {
	freopen("P8817_17.in","r",stdin);
	read(n);
	for(re i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			dis[i][j]=0x7fffffffffffffff;
		} 
	}
	read(m);
	read(k);
	++k;
	for(re i=2; i<=n; ++i) {
		read(a[i]);
	}
	for(re i=1; i<=m; ++i) {
		read(uu);
		read(vv);
		add(uu,vv);
		add(vv,uu);
	}
	for(re i=1;i<=n;++i){
		dij(i);
	}
	for(re i=1;i<=n;++i){
		for(re j=1;j<=n;++j){
			if(i!=j&&dis[1][i]<=k&&dis[i][j]<=k){
				ans[i][j]=a[i]+a[j];
			}else{
				ans[i][j]=-9223372036854775807;
			}
		}
	}
	for(re i=2;i<=n;++i){
		for(re j=2;j<=n;++j){
			if(ans[tmp[i][1]][i]<ans[j][i]){
				tmp[i][3]=tmp[i][2];
				tmp[i][2]=tmp[i][1];
				tmp[i][1]=j;
			}else if(ans[tmp[i][2]][i]<ans[j][i]){
				tmp[i][3]=tmp[i][2];
				tmp[i][2]=j;
			}else if(ans[tmp[i][3]][i]<ans[j][i]){
				tmp[i][3]=j;
			}
		}
	}
	for(re i=2;i<=n;++i){
		for(re j=2;j<=n;++j){
			if(i!=j&&dis[i][j]<=k){
				for(re ii=1;ii<=3;++ii){
					for(re jj=1;jj<=3;++jj){
						if(tmp[i][ii]!=j&&tmp[i][ii]!=tmp[j][jj]&&tmp[j][jj]!=i){
							mx=max(mx,ans[tmp[i][ii]][i]+ans[tmp[j][jj]][j]);
							break;
						}
					}
				}
			}
		}
	}
	cout<<mx;
}
2024/8/23 21:09
加载中...