社区讨论
100pts求调!!!!!!
P8817[CSP-S 2022] 假期计划参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjt77mf
- 此快照首次捕获于
- 2025/11/04 08:06 4 个月前
- 此快照最后确认于
- 2025/11/04 08:06 4 个月前
WA#4
CPP#include <bits/stdc++.h>
using namespace std;
vector<int> e[2505];
int dis1[2505];
long long dis[5][2505];
int n,m,k;
long long w[2505];
bool vis[2505];
inline long long read() {
long long x = 0;
bool flag = true;
char ch = getchar();
while (!isdigit(ch)) {
if (ch == '-')
flag = false;
ch = getchar();
}
while (isdigit(ch)) {
x = (x << 1) + (x << 3) + ch - '0';
ch = getchar();
}
if(flag)
return x;
return ~(x - 1);
}
inline void write(long long x){
if (x<10){
putchar(x+'0');
return ;
}
write(x/10);
putchar(x%10+'0');
}
void spfa(int v0){
memset(vis,0,sizeof(vis));
memset(dis1,0x3f3f3f3f,sizeof(dis1));
dis1[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=0;i<e[h].size();i++){
int y=e[h][i];
if (dis1[h]+1<dis1[y]){
dis1[y]=dis1[h]+1;
if (!vis[y]){
q.push(y);
vis[y]=1;
}
}
}
}
}
bool v[2505][2505];
void dfs(int t,int v0){
if (t==4){
return ;
}
vis[v0]=1;
for (int i=0;i<e[v0].size();i++){
int j=e[v0][i];
if (dis[t][v0]+w[j]>dis[t+1][j] && !vis[j]){
dis[t+1][j]=dis[t][v0]+w[j];
dfs(t+1,j);
}
}
vis[v0]=0;
}
int main(){
n=read();
m=read();
k=read();
for (int i=2;i<=n;i++){
w[i]=read();
}
for (int i=1;i<=m;i++){
int x,y;
x=read();
y=read();
e[y].push_back(x);
e[x].push_back(y);
}
for (int i=1;i<=n;i++){
spfa(i);
for (int j=i+1;j<=n;j++){
if (dis1[j]-1<=k){
v[i][j]=1;
v[j][i]=1;
}
}
}
for (int i=1;i<=n;i++){
e[i].clear();
}
for (int i=1;i<=n-1;i++){
for (int j=i+1;j<=n;j++){
if (v[i][j]){
e[j].push_back(i);
e[i].push_back(j);
}
}
}
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
dfs(0,1);
long long maxx=0;
for (int i=2;i<=n;i++){
if (v[i][1]){
maxx=max(maxx,dis[4][i]);
}
}
write(maxx);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...