刚看到这道题的时候没什么思路
感觉如果爆搜会出现环 问题
发现只有当左右两边都是(如5)1-5,这种一定会产生回环
然后就必须把单出来的删去
再删除单出来对应的
最后因为 在m的取值范围上 wrong了好几次
#include<stdio.h>
int haxia[1002]={0};
int haxib[1002]={0};
int a[10002]={0},b[10002]={0},m;
int n;
void del_a(int i);
void del_b(int i)
{
for(int j=0;j<m;j++)
{
if(a[j]==i)
{
haxib[b[j]]--;
a[j]=0;
}
}
}
void del_a(int i)
{
for(int j=0;j<m;j++)
{
if(b[j]==i)
{
haxia[a[j]]--;
b[j]=0;
}
}
}
void dfs()
{
int temp=0;
for(int i=1;i<=n;i++)
{
if((haxia[i]!=0&&haxib[i]==0)||(haxia[i]==0&&haxib[i]!=0))
{
temp=1;
if(haxia[i])
{
haxia[i]=0;
del_b(i);
}
else
{
haxib[i]=0;
del_a(i);
}
}
}
if(temp)
dfs();
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&a[i],&b[i]);
haxia[a[i]]++;
haxib[b[i] ]++;
}
dfs();
for(int i=1;i<=n;i++)
{
if(haxia[i]!=0&&haxib[i]!=0)
printf("T\n");
else
printf("F\n");
}
}