HDU 4751 二分图判断
来源:互联网 发布:java 统计学函数 编辑:程序博客网 时间:2024/06/16 06:47
点击打开链接
题意:将n个人分到两个集合中,要求每个集合中的人都相互认识
思路:就是判断是不是二分图,对于一个人来说,如果另一个人和我不是相互认识的,那么他肯定是另一个集合中的人,按照这个分配出现矛盾则不能分配成功
#include <queue>#include <vector>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=110;int num[maxn][maxn],cnt[maxn];bool judge(int n,int x){ queue<int>que; que.push(x); while(!que.empty()){ int c=que.front();que.pop(); for(int i=1;i<=n;i++){ if(i==c||(num[i][c]&&num[c][i])) continue;//如果是相互认识的可以在任意一方 else if(cnt[i]==0){//不认识的就要去另一阵营 if(cnt[c]==1) cnt[i]=2; if(cnt[c]==2) cnt[i]=1; que.push(i); }else if(cnt[i]==cnt[c]) return 0;//不认识还在同一阵营,就不能成功 } } return 1;}int main(){ int n,a,b; while(scanf("%d",&n)!=-1){ memset(num,0,sizeof(num)); memset(cnt,0,sizeof(cnt)); for(int i=1;i<=n;i++){ while(1){ scanf("%d",&a); if(a==0) break; num[i][a]=1; } } int flag=0; for(int i=1;i<=n;i++){ if(cnt[i]==0){ cnt[i]=1;//如果cnt[i]为0,说明我和之前所有人都认识,所以我现在去哪个阵营都可以,因为我都相互认识 if(judge(n,i)==0) flag=1; } } if(flag) printf("NO\n"); else printf("YES\n"); } return 0;}
0 0
- HDU 4751 二分图判断
- HDU 4751 (判断二分图)
- HDU 4751 二分图判断
- HDU 4751 交叉染色判断二分图
- hdu 4751 Divide Groups (二分图判断)
- HDU 4751 Divide Groups 二分图判断
- HDU 4751 Divide Groups(二分图判断)
- hdu 4751 染色法判断二分图
- hdu 1829 (判断二分图)
- HDU 3478 二分图判断
- HDU 4751 Divide Groups(二分图的判断)
- HDU 4751 Divide Groups(判断是否为二分图)
- HDU 4751 Divide Groups (判断二分图染色模板)
- HDU 4751 Divide Groups(判断二分图)
- hdu 2444 (判断二分图+最大匹配)
- HDU 2444 判断二分图+最大匹配
- HDU 2444 判断是否为二分图
- hdu 2444(二分图判断+最大匹配)
- UVA_562_Dividing coins
- Android Bitmap
- 在<table>或<div>中如何让传入的文本自动换行
- 欢迎使用CSDN-markdown编辑器
- linux安装oracle客户端
- HDU 4751 二分图判断
- BeanUtils.copyProperties()与PropertyUtils.copyProperties()
- mac下android环境搭建笔记(android studio)
- JNCryptor在Android上的性能其差无比,而在iOS上RNCryptor则其强无比 何解?
- cocoapads的图文教程
- 【windows】是谁占用了你的端口?
- Ubuntu Server view ip
- [git] git 克隆,运行脚本
- 手动配置hibernate项目--POJO、关系映射文件