发现写错之后改成了dfs,现在洛谷上过了,但是poj直接presentation error是什么情况()
现代码如下:
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=2e3+5;
int t,n,m,c[MAXN],e[MAXN][MAXN],s[MAXN],vis[MAXN],k,ans=1;
void init_set(){
for(int i=1;i<=n;i++) s[i]=i;
}
int find_set(int x)
{
if(x==s[x]) return x;
else return find_set(s[x]);
}
void union_set(int x,int y)
{
x=find_set(x),y=find_set(y);
if(x!=y) s[x]=y;
}
/*
void bfs(int x)
{
for(int i=1;i<=n;i++){
if(x!=i&&e[x][i]==1){
c[i]=3-c[x];
bfs(i);
}
}
return;
}
*/
void dfs(int x,int C)
{
c[x]=C;vis[x]=1;
for(int i=1;i<=n;i++)
{
if(x!=i&&vis[i]==0)
{
if(c[i]==C)
{
ans=0;
break;
}
if(e[x][i]==1||e[i][x]==1)
{
vis[i]=1;
dfs(i,3-C);
}
}
}
}
int main()
{
scanf("%d",&t);
while(t--)
{
k++;
scanf("%d%d",&n,&m);
init_set();
int a,b;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
//if(a<b) e[a][b]=1;
//else e[b][a]=1;
e[a][b]=1;
union_set(b,a);
}
for(int i=1;i<=n;i++) if(i==s[i]){c[i]=1;dfs(i,1);}
int f=0;
for(int i=1;i<=n-1;i++) for(int j=i+1;j<=n;j++) if(e[i][j]&&(c[i]==c[j])) f=1;
printf("Scenario #%d:\n",k);
if(f) printf("Suspicious bugs found!\n");
else printf("No suspicious bugs found!\n");
memset(e,0,sizeof(e));
memset(c,0,sizeof(c));
memset(vis,0,sizeof(vis));
ans=1;
}
return 0;
}