HDU 3478 Catch(二分图判定)
http://acm.hdu.edu.cn/showproblem.php?pid=3478
题意:给你一个N个节点和M条边的无向图,并且给你一个起点X,小偷从起点X出发,每个单位时间只能从一点走到相邻的点上.现在问你有没有一个时刻小偷可能在地图的任意节点上?
分析:
我们称那个符合要求的时刻为:完美时刻.首先如果这个无向图是不连通,就不存在完美时刻. 当无向图连通的时候,如果该图是二分图,依然不存在完美时刻.(想想为什么?) 因为整个图被分为两半,一半是奇数时刻能到的,另一半是偶数时刻能到的.
综上所述,只有在图连通且非二分图的时候,才能保证有完美时刻存在.我们只需要判断图是否连通且非二分图即可.其中图是否连通可以直接通过从起点S对图节点染色后,看看是否还有未染色的节点来得出.(错误,不可通过二分图递归判断,因为如果颜色冲突了就立即返回,其他点都没有染色).
连通必须通过并查集判断.
当然这题也可以用BFS来判断当前图是不是二分图,原理与DFS判断类似,都是通过染色看看是否冲突来判断.
AC代码:
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=100000+10;
const int maxm=500000+10;
int n,m,s;
vector<int> G[maxn];
int color[maxn];
int fa[maxn];
int find(int i)
{
if(fa[i]==-1) return i;
return fa[i]=find(fa[i]);
}
bool bipartite(int u)
{
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(color[v]==color[u]) return false;
if(color[v]==0)
{
color[v]=3-color[u];
if(!bipartite(v)) return false;
}
}
return true;
}
int main()
{
int T; scanf("%d",&T);
for(int kase=1;kase<=T;kase++)
{
scanf("%d%d%d",&n,&m,&s);
for(int i=0;i<n;i++) G[i].clear();
memset(color,0,sizeof(color));
memset(fa,-1,sizeof(fa));
for(int i=0;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
u=find(u), v=find(v);
if(u!=v) fa[u]=v;
}
int cnt=0; //连通分量个数
for(int i=0;i<n;i++)if(find(i)==i) cnt++;
if(cnt>1)
{
printf("Case %d: NO\n",kase); //这里忘了Case %d了,WA了
continue;
}
bool sign=true; //存在完美时刻
color[s]=1;
if(bipartite(s)) sign=false;
printf("Case %d: %s\n",kase,sign?"YES":"NO");
}
return 0;
}
分享到:
相关推荐
B HDU 5093 Battle ships题意给出一个n行m列的图,*代表海域,o代表冰水,#代表冰山,要想在海域中放置船,保证船与船之间不能相互看到,之间
二分图匹配实例代码及整理 1、匈牙利算法 HDU 1150 #include #include #include using namespace std; int m,n,k; int vis[105]; int mpt[105][105]; int use[105]; int hungary(int x) { for(int i=1;i<m;i++)...
本人准备2020年保研机试时刷的题目(虽然最后机试取消了,...来自某中流985,在HDU和vjudge平台上大概刷了400道。本文件地图(excel表格)包含了绝大部分我刷过的题目,笔记中具有思路、代码、总结和心得。 大佬勿入!
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
HDU1059的代码
杭电ACMhdu1163
hdu1001解题报告
hdu 1574 passed sorce
HDU的一题........HDU DP动态规
hdu acm 教案 搜索入门 hdu acm 教案 搜索入门
hdu2101AC代码
搜索 dfs 解题代码 hdu1241
hdu acm 教案 动态规划(1) hdu acm 教案 动态规划(1)
hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。
ACM HDU题目分类,我自己总结的大概只有十来个吧
hdu1290 解题报告 献给杭电五十周年校庆的礼物 (切西瓜问题,即平面分割空间)
HDU最全ac代码
hdu 1166线段树代码
hdu动态规划算法集锦
hdu题目分类