简要题解:

意在判断哪些点在一个图的  奇环的双连通分量内。

tarjan求出所有的点双连通分量,再用二分图染色判断每个双连通分量是否形成了奇环,记录哪些点出现在内奇环内

输出没有在奇环内的点的数目

code

/*
求有向图的点双连通分支tarjan算法
思路:
1.对图先进行深度优先搜索形成搜索数,计算每一个节点的先深编号dfn[n]
2.计算所有节点v的low[v]是在先深生成树上按照后根遍历的顺序进行的.
因此,当仿问节点v时它的每一个儿子u的low[u]已经计算完毕这时low[v]取下面三值的最小者:
1)dfn[v];
2)dfn[w],对于回退边(v,w)
3)low[u],对于v的任何儿子u
3.判断一个顶点是不是桥,割点:
a)v为树根,且v有多于1个子树
b)v不为树根,且满足存在边(v,u) ,使得dfn[v]<=low[u].
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#define INF 1009
using namespace std;
int n, m, x, y;
bool g[INF][INF];
int low[INF], dfn[INF], sta[INF], ans[INF][INF], f[INF], ok[INF], Top, Max , tcc, t;
bool make (int x, int cow) {
for (int i = 0; i < cow; i++) {
int v = ans[tcc][i];
if (x != v && g[x][v]) {
if (f[v] == -1) {
f[v] = !f[x];
if (make (v, cow) ) return 1;
}
else if (f[v] == f[x]) return 1;
}
}
return 0;
}
void check (int cow) {
memset (f, -1, sizeof f);
f[ans[tcc][0]] = 0;
if (make (ans[tcc][0], cow) )
for (int i = 0; i < cow; i++)
ok[ans[tcc][i]] = 1;
}
void dfs (int k, int from) {
sta[++Top] = k;
low[k] = dfn[k] = ++t;
for (int i = 1; i <= n; i++) {
if (i == from || g[k][i] == 0 || k == i) continue;
if (!dfn[i]) {
dfs (i, k);
low[k] = min (low[k], low[i]);
if (dfn[k] <= low[i]) {
ans[tcc][0] = k;
int cow = 1;
do
ans[tcc][cow++] = sta[Top];
while (sta[Top--] != i);
if (cow > 2) check (cow), ++tcc;
}
}
else low[k] = min (low[k], dfn[i]);
}
return ;
}
void Tarjan (int n) {
memset (low, 0, sizeof low);
memset (dfn, 0, sizeof dfn);
Top = tcc = t = 0;
for (int i = 1; i <= n; i++)
if (dfn[i] == 0) dfs (i, -1);
}
int main() {
while (~scanf ("%d %d", &n, &m) ) {
if (n == 0 && m == 0) return 0;
memset (g, 1, sizeof g);
memset (ok, 0, sizeof ok);
Max = 0;
for (int i = 1; i <= m; i++) {
scanf ("%d %d", &x, &y);
g[x][y] = g[y][x] = 0;
}
Tarjan (n);
int ans = 0;
for (int i = 1; i <= n; i++)
if (!ok[i]) ans++;
printf ("%d\n", ans);
}
return 0;
}

  

  

POJ 2942.Knights of the Round Table (双连通)的更多相关文章

  1. POJ 2942 Knights of the Round Table 黑白着色+点双连通分量

    题目来源:POJ 2942 Knights of the Round Table 题意:统计多个个骑士不能參加随意一场会议 每场会议必须至少三个人 排成一个圈 而且相邻的人不能有矛盾 题目给出若干个条 ...

  2. poj 2942 Knights of the Round Table 圆桌骑士(双连通分量模板题)

    Knights of the Round Table Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 9169   Accep ...

  3. poj 2942 Knights of the Round Table - Tarjan

    Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress ...

  4. POJ 2942 Knights of the Round Table

    Knights of the Round Table Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 10911   Acce ...

  5. POJ 2942 Knights of the Round Table - from lanshui_Yang

    Description Being a knight is a very attractive career: searching for the Holy Grail, saving damsels ...

  6. POJ 2942 Knights of the Round Table (点双连通分量)

    题意:多个骑士要开会,3人及以上才能凑一桌,其中部分人已经互相讨厌,肯定不坐在同一桌的相邻位置,而且一桌只能奇数个人才能开台.给出多个人的互相讨厌图,要求多少人开不成会(注:会议不要求同时进行,一个人 ...

  7. poj 2942 Knights of the Round Table(点双连通分量+二分图判定)

    题目链接:http://poj.org/problem?id=2942 题意:n个骑士要举行圆桌会议,但是有些骑士相互仇视,必须满足以下两个条件才能举行: (1)任何两个互相仇视的骑士不能相邻,每个骑 ...

  8. POJ 2942 Knights of the Round Table(双连通分量)

    http://poj.org/problem?id=2942 题意 :n个骑士举行圆桌会议,每次会议应至少3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置.如果意见发生分歧,则需要举手表决,因此 ...

  9. POJ - 2942 Knights of the Round Table (点双联通分量+二分图判定)

    题意:有N个人要参加会议,围圈而坐,需要举手表决,所以每次会议都必须是奇数个人参加.有M对人互相讨厌,他们的座位不能相邻.问有多少人任意一场会议都不能出席. 分析:给出的M条关系是讨厌,将每个人视作点 ...

随机推荐

  1. 在html页面中利用ftp访问协议格式载入服务器图片

    访问格式为:ftp://用户名:密码@服务器ip:服务器端口/具体文件路径 如下所示: <img src="ftp://lxj:123@127.0.0.1:21/IMG_2013051 ...

  2. Selenium 设置管理cookie,超时时间

    可以通过option设置管理cookie,超时时间 一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,储存在内存.而session机制采用的是在服 ...

  3. 删除N 中 所有的 x

    //删除N 中 所有的 x #include <stdio.h> #define N 10 int f(int a[],int n,int x) { int i ,j=0; for(i=0 ...

  4. 【转】SVN linux命令及 windows相关操作(二)

    转自这里:http://www.uml.org.cn/pzgl/200904246.asp 1 安装及下载client 端 2 什么是SVN(Subversion)? 3 为甚么要用SVN? 4 怎么 ...

  5. android进程间通信:使用AIDL

    android 的binder其实是基于 openbinder实现的,openbinder的地址:http://www.angryredplanet.com/~hackbod/openbinder/d ...

  6. zabbix web场景模拟监控配置

    一,zabbix2.2.3 VMware Vsphere exsi监控配置步骤, 1,添加监控主机 2,添加聚集macro;{$PASSWORD} = yoodo.com{$URL} = http:/ ...

  7. 2 storm的topology提交执行

    本博文的主要内容有 .storm单机模式,打包,放到storm集群 .Storm的并发机制图 .Storm的相关概念 .附PPT 打包,放到storm集群去.我这里,是单机模式下的storm. wee ...

  8. 层层递进Struts1(八)之总结

    先来看一下Struts1学习总结的思维导图,画的主要是Struts1中的重点和博客分布,如下所示: 系列博客的侧重点是: Struts1是什么? 为什么要使用它? 如何使用Struts1? Strut ...

  9. Mybatis 控制台打出Sql-Log的设置

    首先工程中必须要有slf4j-log4j12-1.7.12.jar这个包,否则打不出来 而后工程中“log4j.properties”文件如下: log4j.appender.stdout=org.a ...

  10. 匿名类型和Object转换

    本文转载:http://www.cnblogs.com/JustRun1983/archive/2012/05/13/2497997.html net中的匿名类型非常好用, 但是开发中遇到一个问题,当 ...