北京 @ 2021-05-03 09:53:31
每次都把士兵放在度数最多的点
思路可行吗
代码如下:
//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;
}
感谢指教
by 北京 @ 2021-05-03 09:54:18
总之交了好像没过
试了几组样例好像没有问题,也不知道为什么会挂掉三个点
by 摸鱼酱 @ 2021-05-03 09:57:12
考虑一条长度为 5 的链
by 摸鱼酱 @ 2021-05-03 09:57:23
还是写树形dp吧
by 摸鱼酱 @ 2021-05-03 09:58:35
@北京
by 北京 @ 2021-05-03 10:05:15
@摸鱼酱 啊这,为什么按度数排序会出问题?
by 北京 @ 2021-05-03 10:05:40
@摸鱼酱 树形dp已经过了一遍,想试试贪心写法
by 摸鱼酱 @ 2021-05-03 10:06:33
我换一下编号变成
by 北京 @ 2021-05-03 10:09:37
@摸鱼酱 哦,懂了
感谢大佬!