社区讨论

TLE75QWQ

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lo7myhea
此快照首次捕获于
2023/10/27 04:27
2 年前
此快照最后确认于
2023/10/27 04:27
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
#define rep(a,b,c) for(register int a=b;a<=c;++a)
using namespace std;
int n,m,k;
typedef long long ll;
const int N=2e3+550;
int top;
int ver[N<<1],head[N],nxt[N<<1];
inline char gc()
{
	static char BB[1000000],*S=BB,*T=BB;
	return S==T&&(T=(S=BB)+fread(BB,1,1000000,stdin),S==T)?EOF:*S++;
}
inline ll read()
{
	ll x=0,f=1;char ch=gc();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-') f=-1;
		ch=gc();
	}
	while(ch<='9'&&ch>='0')
	{
		x=x*10+ch-48;
		ch=gc();
	}
	return x*f;
}
inline void add(int u,int v)
{
	ver[++top]=v;
	nxt[top]=head[u];
	head[u]=top;
}
ll a[N];
vector<int> dis[N];
bool vis[N][N];
struct node{
	int t,len;
};
ll f[N][4],w[N][4];
queue<node> qu;
inline void cal(int t)
{
	qu.push(node{t,0});vis[t][t]=1;
	while(!qu.empty())
	{
		node s=qu.front();qu.pop();
		if(s.len>=k) continue;
		for(int i=head[s.t];i;i=nxt[i])
		{
			int to=ver[i];
			if(!vis[t][to])
			{
				vis[t][to]=1;
				dis[t].push_back(to);
				qu.push(node{to,s.len+1});
			}
		}
	}
}
bool in1[N];
int main()
{
	//clock_t start=clock();
	//freopen("in.in","r",stdin);
//	freopen("holiday3.in","r",stdin);
//	freopen("out.out","w",stdout);
	n=read(),m=read(),k=read()+1;
	rep(i,2,n) a[i]=read();
	rep(i,1,m)
	{
		int u,v;u=read(),v=read();
		add(u,v);add(v,u);
	}
	cal(1);
	for(int i=0;i<dis[1].size();++i) in1[dis[1][i]]=1;
	rep(i,2,n) cal(i);
	rep(i,2,n)
	{
		for(int p=0;p<dis[i].size();++p)
		{
			int j=dis[i][p];
			if(!in1[j]) continue;
			rep(r,1,3)
			{
				if(f[i][r]<a[i]+a[j])
				{
					for(int l=3;l>r;l--) f[i][l]=f[i][l-1],w[i][l]=w[i][l-1];
					f[i][r]=a[i]+a[j];
					w[i][r]=j;
					break;
				}
			}
		}
	}
	ll ans=0;
	rep(l,2,n-1)
	{
		for(int p=0;p<dis[l].size();++p)
		{
			int r=dis[l][p];
			rep(i,1,3)
			{
				rep(j,1,3)
				{
					if(w[l][i]!=w[r][j]&&w[l][i]!=r&&l!=w[r][j]) ans=max(ans,f[l][i]+f[r][j]);
				}
			}
		}
	}
	cout<<ans<<endl;
	//clock_t finish=clock();
	//cout<<double(finish-start)/CLOCKS_PER_SEC<<endl;
	return 0;
}
TLE on #15#16#17#18#20
麻烦大佬看看是哪里写挂了

回复

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

正在加载回复...