社区讨论

75pts求调!

P8817[CSP-S 2022] 假期计划参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjtbn48
此快照首次捕获于
2025/11/04 08:10
4 个月前
此快照最后确认于
2025/11/04 08:10
4 个月前
查看原帖
WA#2 RE#4#5#6#18#20#24#25#26
CPP
#include <bits/stdc++.h>
using namespace std;
struct edge{
	int to,nxt;
	long long dis;
};
edge e[100005];
int num,head[50005];
long long dis[50005],n,m,k;
long long w[5005];
bool vis[2505];
void add(int x,int y,long long z){
	e[++num].nxt=head[x];
	e[num].to=y;
	e[num].dis=z;
	head[x]=num;
}
void spfa(int v0){
	memset(vis,0,sizeof(vis));
	memset(dis,0x3f3f3f3f,sizeof(dis));
	dis[v0]=0;
	queue<int> q;
	q.push(v0);
	vis[v0]=1;
	while (!q.empty()){
		int h=q.front();
		q.pop();
		vis[h]=0;
		for (int i=head[h];i;i=e[i].nxt){
			int y=e[i].to;
			if (dis[h]+e[i].dis<dis[y]){
				dis[y]=dis[h]+e[i].dis;
				if (!vis[y]){
					q.push(y);
					vis[y]=1;
				}
			}
		}
	}
}
bool v[2505][2505];
void dfs(int v0){
	vis[v0%n]=1;
	for (int i=head[v0];i;i=e[i].nxt){
		int j=e[i].to;
		if (dis[v0]+e[i].dis>dis[j] && !vis[j%n]){
    		dis[j]=dis[v0]+e[i].dis;
    		dfs(j);
		}
	}
	vis[v0%n]=0;
}
int main(){
	cin>>n>>m>>k;
	for (int i=2;i<=n;i++){
		cin>>w[i];
	}
	for (int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		add(y,x,1);
		add(x,y,1);
	}
	for (int i=1;i<=n-1;i++){
		spfa(i);
		for (int j=i+1;j<=n;j++){
			//cout<<i<<" "<<j<<" "<<dis[j]-1<<endl;
			if (dis[j]-1<=k){
				v[i][j]=1;
                v[j][i]=1;
			}
		}
	}
	num=0;
	memset(head,0,sizeof(head));
	for (int kk=0;kk<=3;kk++){
		for (int i=1;i<=n-1;i++){
			for (int j=i+1;j<=n;j++){
				if (v[i][j]){
					add(kk*n+i,(kk+1)*n+j,w[j]);
                    add(kk*n+j,(kk+1)*n+i,w[i]);
				}
			}
		}
	}
	for (int i=1;i<=4*n+n;i++){
		dis[i]=0;
		vis[i]=0;
	}
	dfs(1);
	long long maxx=0;
	for (int i=2;i<=n;i++){
		if (v[i][1]){
			maxx=max(maxx,dis[4*n+i]);
		}
	//	cout<<dis[4*n+i]<<endl;
	}
	cout<<maxx;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...