捞
  • 板块灌水区
  • 楼主__2304__
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/5/26 18:00
  • 上次更新2024/5/26 20:21:48
查看原帖
捞
719611
__2304__楼主2024/5/26 18:00

Link

发现写错之后改成了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;
}
2024/5/26 18:00
加载中...