贪心可行吗?
  • 板块P2016 战略游戏
  • 楼主北京
  • 当前回复8
  • 已保存回复8
  • 发布时间2021/5/3 09:53
  • 上次更新2023/11/4 23:48:55
查看原帖
贪心可行吗?
322285
北京楼主2021/5/3 09:53

每次都把士兵放在度数最多的点

思路可行吗

代码如下:

//P2016 战略游戏 贪心
#include<bits/stdc++.h>
using std::vector;
vector<int>e[1500+10];
long long cnt;
struct de
{
	int index,d;
}deg[1500+10];
inline int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
	return s*w;
}
int main()
{
	int n=read();
	for(int i=1;i<=n;++i)
	{
		int xx=read(),x=read();
		for(int j=1;j<=x;++j)
		{
			int u=read();
			e[xx].push_back(u);
			e[u].push_back(xx);
			++deg[xx].d,++deg[u].d;
		}
	}
	
	for(int i=0;i<n;++i)
		deg[i].index=i;
	
	int maxn=0,max_seq=0;
	for(int i=0;i<n;++i)
		if(deg[i].d>maxn)maxn=deg[i].d,max_seq=i;
	while(maxn)
	{
		for(int i=0;i<e[max_seq].size();++i)
			--deg[e[max_seq][i]].d;
		deg[max_seq].d=0;
		++cnt;
		maxn=0;
		for(int i=0;i<n;++i)
			if(deg[i].d>maxn)maxn=deg[i].d,max_seq=i;
	}
	
	printf("%d",cnt);
	return 0;
}

感谢指教

2021/5/3 09:53
加载中...