每次都把士兵放在度数最多的点
思路可行吗
代码如下:
//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;
}
感谢指教