博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hdu 3478 Catch
阅读量:5317 次
发布时间:2019-06-14

本文共 1441 字,大约阅读时间需要 4 分钟。

 

如果出现遍历图中的某个点都是在奇数时刻或者偶数时刻,那么小偷的藏点就是根据时间判定在某些的奇数点和偶数点了。

如果图出现奇数的环,即:有一个环由奇数个点组成,那么环中的某个点在奇数和偶数时刻都能到达(可以画图试试)。其实奇数环导致小偷藏点无规律的最大原因是:

在遍历最后奇数环的两个(必定是两个)未遍历点的时候他们是同奇(偶)的,然而还有一条边直接相连。导致在下一时刻,那两个点又可以同时变成偶(奇)。如果在回溯遍历的话,就会出现整张图在奇数时刻或者偶数时刻都能到达。

无向图G为二部图的充分必要条件是:

G至少有两个顶点,且其所有回路的长度均为偶数。

如果我们把图中奇数时刻能够到达的点归到X集合,偶数能到点归到Y集合,那么如果图中出现相同集合的点有

边相连,那么就不满足二分图的性质,即可输出YES,如果原图可二分图话,答案就是NO了。

然后就是经典的二分图判定。

CODE:

 

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using 
namespace std;
const 
int MAXN = 
100010;
const 
int MAXM = 
500010;
struct Edge
{
    
int v, next;
}edge[MAXM];
int n, m, s;
int cnt;
int first[MAXN];
bool color[MAXN], vis[MAXN];
void init()
{
    cnt = 
0;
    memset(vis, 
0
sizeof(vis));
    memset(color, 
0
sizeof(color));
    memset(first, -
1
sizeof(first));
}
void read_graph(
int u, 
int v)
{
    edge[cnt].v = v;
    edge[cnt].next = first[u], first[u] = cnt++;
}
int find(
int u)
{
    
for(
int e = first[u]; e != -
1; e = edge[e].next)
    {
        
int v = edge[e].v;
        
if(!vis[v])
        {
            vis[v] = 
1;
            color[v] = !color[u];
            find(v);
        }
        
else 
if(color[u] == color[v])    
return 
false;
    }
    
return 
true;
}
int main()
{
    
int T, times = 
0;
    scanf(
"
%d
", &T);
    
while(T--)
    {
        init();
        scanf(
"
%d%d%d
", &n, &m, &s);
        
while(m--)
        {
            
int u, v;
            scanf(
"
%d%d
", &u, &v);
            read_graph(u, v);
            read_graph(v, u);
        }
        printf(
"
Case %d: 
", ++times);
        color[s] = 
1;
        vis[s] = 
1;
        printf(find(s)?
"
NO\n
":
"
YES\n
");
    }
    
return 
0;
}

 

转载于:https://www.cnblogs.com/g0feng/archive/2012/11/02/2751598.html

你可能感兴趣的文章
ubuntu 安装后的配置
查看>>
【模板】对拍程序
查看>>
【转】redo与undo
查看>>
Django 模型层
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>
安卓当中的线程和每秒刷一次
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
属性动画
查看>>
标识符
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
快来熟练使用 Mac 编程
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>