[CSP-S 2022] 假期计划 垃圾代码出问题了
查看原帖
[CSP-S 2022] 假期计划 垃圾代码出问题了
300166
Zikl楼主2023/1/15 20:46

感觉做法假了,又好像没假

求个能叉了我代码的hack,或讲下具体错误原因

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
long long ver[20010],nxt[20010],head[20010],tot;
long long n,m,k,a[20010],d[6010][6010],ans;
void add(long long x,long long y){
    ver[++tot]=y;
    nxt[tot]=head[x],head[x]=tot;
}
struct node{
	long long dis,z;
}xx[20010][7];
void  dijkstra(int s){
	priority_queue< pair<long long,long long> >q;
	bool v[20010]={0};
	for(int i=1;i<=n;i++)
    d[i][s]=0x3f;
	d[s][s]=0;
	q.push(make_pair(0,s));
	while(q.size()){
		int x=q.top().second;
		q.pop();
		if(v[x]==0){
			v[x]=1;
			for(int i=head[x];i;i=nxt[i]){
				int y=ver[i];
				if(d[y][s]>d[x][s]+1){
				d[y][s]=d[x][s]+1;
				q.push(make_pair(-d[y][s],y));	
				}
			}
		}
	}
}
int main(){
	cin>>n>>m>>k;
    for(int i=2;i<=n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=m;i++){
        long long x,y;
        cin>>x>>y;
        add(x,y);
        add(y,x);
    }
    for(int i=1;i<=n;i++)
    dijkstra(i);
    for(int i=2;i<=n;i++)
    for(int j=2;j<=n;j++){
		int kkk=j;
		if(d[kkk][i]>k+1||i==kkk) continue;
		for(int bb=1;bb<=3;bb++){
			if(xx[i][bb].dis<a[kkk]){
				int dfh=a[kkk],kkkk=kkk;
				kkk=xx[i][bb].dis;
				xx[i][bb].dis=dfh;
				xx[i][bb].z=kkkk;
			}
		}
    }
    for(int i=1;i<=n;i++)
	for(int bb=1;bb<=3;bb++)
	for(int j=1;j<=n;j++)
	for(int cc=1;cc<=3;cc++){
		if(xx[i][bb].z==0||xx[j][cc].z==0) continue;
		if(d[1][xx[i][bb].z]>k+1||d[xx[j][cc].z][1]>k+1||d[i][j]>k+1) continue;
		if(i!=j&&xx[i][bb].z!=xx[j][cc].z&&xx[i][bb].z!=j&&xx[j][cc].z!=i){
		/*	cout<<"a: "<<xx[i][bb].z<<" "<<xx[i][bb].dis<<endl;
			cout<<"b: "<<i<<" "<<a[i]<<endl;
			cout<<"c: "<<xx[j][cc].z<<" "<<xx[j][cc].dis<<endl;
			cout<<"d: "<<j<<" "<<a[j]<<endl;
			cout<<"a+b+c+d: "<<a[i]+a[j]+xx[j][cc].dis+xx[i][bb].dis<<endl;*/
			ans=max(a[i]+a[j]+xx[j][cc].dis+xx[i][bb].dis,ans);
			/*cout<<"ans: "<<ans<<endl;
			cout<<"-----------------------------------"<<endl;*/
		}
	}
	printf("%d",ans);
	return 0; 
} 
2023/1/15 20:46
加载中...