hdu 4751 Divide Groups 2013南京网络赛
来源:互联网 发布:python 无穷大 编辑:程序博客网 时间:2024/06/07 23:44
hdu 4751 Divide Groups 2013南京网络赛、
根据跟定的有向图,将图分成两个联通的有向完全图;
首先,把单向边去掉,当做没边就好,然后利用BFS的思想搜索,因为搜索中也是一层一层的往外扩展,(就像是象棋中一圈一圈往外扩展一样); 每一圈就是一个阶段,其实就是先搜这个点的非朋友,非朋友放到另一个分组里面,然后非朋友又搜索到非朋友,放到第一个分组里面;每一阶段外队列里面添加上一个-1分隔就好了,同时分组号变化一下! 很妙的思路,最后,再判断一下每一个分组是否是完全图就好了,这样先分再判断的是否符合要求的思路挺好的!把难度降低了一个等级!
题解来源:点击这里
题目:HDU 4751
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int N = 110;int g[N][N];int main(){ int n, x; while(scanf("%d",&n) == 1) { memset(g, 0, sizeof g); for (int i = 0;i<n;i++) { while(scanf("%d",&x)&&x) { g[i][x - 1] = 1;///有向图, } } for (int i = 0;i<n;i++) { for (int j = 0;j<n;j++) { if (!g[i][j] || !g[j][i])///把单向边去掉 g[i][j] = g[j][i] = 0; } g[i][i] = 1; } bool use[110] = {0}; int a[2][110], an[2] = {0}; for (int i = 0;i<n;i++) {///枚举每一个人,BFS的思想,寻找每个人的非朋友关系,然后放到与之不同的另一个数组中,紧接着在BFS if (!use[i]) { int sd = 1; queue<int> coll; coll.push(i); coll.push(-1); a[0][an[0]++] = i; use[i] = 1; while(!coll.empty()) { int cur = coll.front(); coll.pop(); if (cur == -1) {///每次碰到-1就变化一次 sd ^= 1; if (!coll.empty())///??? coll.push(-1); continue; } for (int j = 0;j<n;j++) { if (!use[j] && !g[cur][j]) { use[j] = 1; coll.push(j); a[sd][an[sd]++] = j; } } } } } ///下面是检验用的,检验成功的话 for (int i = 0;i<an[0];i++) { for (int j = 0;j<an[0];j++) { if (!g[a[0][i]][a[0][j]]) { puts("NO"); goto zhaoyj; } } } for (int i = 0;i<an[1];i++) { for (int j = 0;j<an[1];j++) { if (!g[ a[1][i] ][ a[1][j] ]) { puts("NO"); goto zhaoyj; } } } puts("YES"); zhaoyj:; } return 0;}
- hdu 4751 Divide Groups 2013南京网络赛
- HDUOJ 4751 Divide Groups 2013南京网络赛1004
- hdu 4751 Divide Groups(2013南京网络赛D题,黑白染色)
- HDU 4751 Divide Groups
- HDU-4751-Divide Groups
- HDU 4751 Divide Groups
- HDU:4751 Divide Groups
- HDU-4751 Divide Groups
- HDU 4751 Divide Groups
- hdu 4751 Divide Groups
- HDU 4751 Divide Groups
- hdu 4751 Divide Groups 染色
- HDU 4751 — Divide Groups
- hdu 4751——Divide Groups
- HDU 4751 Divide Groups (BFS)
- HDU-#4751 Divide Groups(2-SAT)
- HDU 4751 Divide Groups (二分图)
- HDU - 4751 Divide Groups(二分图)
- Javascript string.replace 方法中 函数参数的使用
- Windows下的Objective-C集成开发环境(IDE)
- 关于object-c
- ORA-01719 outer join operator (+) not allowed in operand of OR or IN
- 金山网络CEO 傅盛
- hdu 4751 Divide Groups 2013南京网络赛
- 常用算法设计方法
- paip.提升用户体验----c++ c# 配色方案
- Exception
- Sandcastle:开源C#文档生成工具(也可用于其他语言)
- FusionChart用XML和JSON两种格式提供数据源
- android 通过uri截取指定大小的图片显示在imageview上
- 在ubuntu 10.04.01TLS 中安装中文输入法
- P 123