题解 AT2389 【Poor Turkeys】
【AGC016E】Poor Turkeys 题解
首先记住一句话:留着你是因为以后要炖了你。这句话非常重要,它的思想是题解的核心
我们设状态
如果我们从时间倒流的角度来考虑这个状态,那么当前
考虑一只鸡
那么我们把一对鸡
将这个思路拓展一下,假如有一个时刻需要在
再拓展一下,我们可以得到结论:
按上面提到的两个结论去做就可以了,复杂度
#include<bits/stdc++.h>
using namespace std;
const int M=100010;
bool stu[410][410];
int n,m,a[M],b[M];
bool cant[410];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
scanf("%d%d",a+i,b+i);
for(int i=1;i<=n;i++)
{
stu[i][i]=1;
for(int j=m;j>=1;j--)
{
bool x=stu[i][a[j]],y=stu[i][b[j]];
if(x&&y){cant[i]=1;break;}
else if(x) stu[i][b[j]]=1;
else if(y) stu[i][a[j]]=1;
}
}
int ans=0;
for(int i=1;i<n;i++)
{
if(cant[i]) continue;
for(int j=i+1;j<=n;j++)
{
if(cant[j]) continue;
bool flag=1;
for(int k=1;k<=n;k++)
if(stu[i][k]&&stu[j][k]) flag=0;
ans+=flag;
}
}
printf("%d\n",ans);
return 0;
}