社区讨论
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 条回复,欢迎继续交流。
正在加载回复...