第三个样例我得3907,求大佬帮忙查错
查看原帖
第三个样例我得3907,求大佬帮忙查错
558299
lzc2006楼主2022/10/30 00:09

代码如下

#include<iostream>
#include<cmath>
#include<cstdio>
#include<map>
#include<algorithm> 
#include<vector>
#define inf 1234567890
#define maxn 1005
#define ll long long
using namespace std;

ll n,m,k,s,a[maxn][maxn],ans,goal[maxn];
vector<int> ma[maxn];

inline int read(){
	int f=1,x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			f=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<3)+(x<<1)+ch-'0';
		ch=getchar();
	}
	return x*f;
}

void floyd(){
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			if(a[i][k]==inf||k==i){
				continue;
			}
			for(int j=1;j<=n;j++){
				a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
				if(a[i][j]>k){
					a[i][j]=inf;
				}
			} 
		}
	}
}

void dfs(int tp,int x,ll tot){
	if(x==0){
		if(tp==1){
			ans=max(ans,tot);
			return ;
		}
	}
	for(int i=0;i<ma[tp].size();i++){
		if(x>1){
			if(ma[tp][i]>tp){
				dfs(ma[tp][i],x-1,tot+goal[ma[tp][i]]);
			}
		}
		else{
			if(ma[tp][i]==1){
				dfs(ma[tp][i],x-1,tot);
			}
			else{
				return ;
			}
		}
	}
	return ;
}

int main(){
	n=read();m=read();k=read();
	k++;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j]=inf;
		}
	}
	goal[1]=0;
	for(int i=2;i<=n;i++){
		goal[i]=read();
	}
	for(int i=1,u,v;i<=m;i++){
		u=read();v=read();
		a[u][v]=1;
		a[v][u]=1;
	}
	floyd();
	for(int i=1;i<=n;i++){
		if(a[i][1]<=k){
			ma[i].push_back(1);
		}
		for(int j=i+1;j<=n;j++){
			if(a[i][j]<=k){
				ma[i].push_back(j);
			}
		}
	}
	dfs(1,5,0);
	cout<<ans<<endl;
	return 0;
}

姑且不论TLE和RE,为什么第三个样例比标准输出少1

2022/10/30 00:09
加载中...