关于本题无解的判定
查看原帖
关于本题无解的判定
127925
Kio_楼主2021/10/29 15:36

RT,我先是写了如下的判定方法:

		bool f=0;
		while(m--){
			int u=read(), v=read();
			scanf("%s",c+1);
			if(c[1] == 'c'){
				if(find(u) == find(v+n) || find(u+n) == find(v)){
					f=1;
					break;
				}
				merge(u,v);
				merge(u+n,v+n);
			}
			else{
				if(find(u) == find(v) || find(u+n) == find(v+n)){
					f=1;
					break;
				}
				merge(u,v+n);
				merge(u+n,v);
			}
		}
		if(f){
			
			printf("-1\n");
			continue;
		}

没过,并提示我将并非无解的点判成了无解

但我把判定方法换成如下这种后(第二行),就能通过了:

for(int i=1;i<=n;i++){
	if(find(i) == find(i+n)) { f=1; break; }
		if(!vis[find(i)] && !vis[find(i+n)]){
			ans += max(size[find(i)], size[find(i+n)]);
			vis[find(i)] = vis[find(i+n)] = 1;
		}
}

百思不得其解,为何第一种的判定是错误的?求大佬帮忙看看Orz

2021/10/29 15:36
加载中...