社区讨论

民间WA,Unaccepted 100分求调

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lo1hnv5n
此快照首次捕获于
2023/10/22 21:12
2 年前
此快照最后确认于
2023/11/02 21:48
2 年前
查看原帖
做法是自己想的,感觉和正解差不多,就是bfs求可到达点然后bitset求交集贪心处理,然后枚举b,c两个点判断
民间数据寄了几个点,但是找不到问题原因()
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=2500+10;
typedef long long ll;
int n,m,k;
ll a[maxn];
vector<int>c[maxn];
bitset<maxn>ct[maxn],cp[maxn];
int vis[maxn],dis[maxn];
void bfs(int x)
{
	memset(vis,0,sizeof(vis));
	memset(dis,0x3f3f3f3f,sizeof(dis));
	vis[x]=1;dis[x]=0;
	queue<int>q;
	q.push(x);
	while(!q.empty())
	{
		int p=q.front();
		q.pop();
		for(int i=0;i<c[p].size();i++)
		{
			if(vis[c[p][i]]==1)
				continue;
			vis[c[p][i]]=1;
			dis[c[p][i]]=dis[p]+1;
			q.push(c[p][i]);
		}
	}
	for(int i=1;i<=n;i++)
		if(dis[i]<=k&&x!=i)
			ct[x][i]=1;
	return;
}
pair<ll,int>dx[maxn][4];
pair<ll,int>vim[maxn];
void get3max(int x)
{
	for(int i=1;i<=n;i++)
	{
		if(cp[x][i]==1)
			vim[i].first=a[i];
		else
			vim[i].first=-1;
		vim[i].second=i;
	}
	for(int i=1;i<=3;i++)
	{
		for(int j=n-1;j>=i;j--)
		{
			if(vim[j].first<vim[j+1].first)
				swap(vim[j+1],vim[j]);
		}
		dx[x][i]=vim[i];
//		cout<<dx[x][i].first<<" "<<dx[x][i].second<<endl;
	}
	return;
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>m>>k;
	k+=1;
	for(int i=2;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=m;i++)
	{
		int x,y;
		cin>>x>>y;
		c[x].push_back(y);
		c[y].push_back(x);
	}
	for(int i=1;i<=n;i++)
		bfs(i);
	for(int i=1;i<=n;i++)
	{
		cp[i]=ct[i]&ct[1];
		get3max(i);
	}
	ll ans=0;
	for(int p=2;p<=n;p++)
	{
		for(int t=2;t<=n;t++)
		{
			if(p==t)
				continue;
			if(ct[p][t]==0)
				continue;
			for(int i=1;i<=3&&dx[p][i].first!=-1;i++)
			{
				for(int j=1;j<=3&&dx[t][i].first!=-1;j++)
				{
					if(1==p||1==t||1==dx[p][i].second||1==dx[t][j].second||p==t||p==dx[p][i].second||p==dx[t][j].second||dx[p][i].second==dx[t][j].second||t==dx[p][i].second||t==dx[t][j].second)
						continue;
					ans=max(ans,a[p]+a[t]+dx[p][i].first+dx[t][j].first);
				}
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}


麻烦好心人调一下/kel/kel 给关注qwq

回复

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

正在加载回复...