hdu 4751 判二分图,整个图不一定连通

题意:人与人之间可以认识或不认识,,可以单向认识也可以双向认识,给你他们认识的关系,让你将他们分成两组,每组里面的任意两个人都认识。转化一下,将双向认识的人之间不连边,单向认识或不认识的人连边,然后判二分图就行了。#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>using namespace std;const int maxn=105;int maze[maxn][maxn];int imap[maxn][maxn];int color[maxn];int n;bool fuck_dfs(int u,int f){for(int i=1; i<=n; i++){if(imap[u][i]==0||i==f) continue;if(color[u]==color[i]) return false;if(!color[i]){color[i]=3-color[u];if(!fuck_dfs(i,u)) return false;}}return true;}int main(){int a;while(~scanf("%d",&n)){memset(maze,0,sizeof(maze));for(int i=1; i<=n; i++){while(scanf("%d",&a)){if(a==0) break;maze[i][a]=1;}}memset(imap,0,sizeof(imap));for(int i=1; i<=n; i++){for(int j=i+1; j<=n; j++){if(maze[i][j]&&maze[j][i]) continue;imap[i][j]=imap[j][i]=1;}}int flag=0;memset(color,0,sizeof(color));for(int i=1; i<=n; i++){if(color[i]==0){color[i]=1;if(!fuck_dfs(i,i)){flag=1;break;}}}if(flag) printf("NO\n");else printf("YES\n");}return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

有本钱耍个性,离开睁眼闭眼看见的城市,逃离身边的纷纷扰扰,

hdu 4751 判二分图,整个图不一定连通

相关文章:

你感兴趣的文章:

标签云: