【tarjan求双连通分量+染色判二分图】POJ 2942

POJ2942-Knights of the Round Table【Tarjan算法】 POJ2942-Knights of the Round Table 【Tarjan算法】 解题报告+AC代码 http://hi.youkuaiyun.com/!s/F3L8HO ================================== 我的POJ所有解题报告:http://blog.youkuaiyun.com/lyy289065406/article/details/6642573 立即下载

这题debug的好郁闷啊!!!先是染色有问题,然后就是各种小错误....

判奇圈可以用二分图标准,因为奇圈肯定不是二分图,之前还要分离各双连通分量.......染色法判二分图一定要先对分量里每一个点都染一次色再枚举任意两个相邻的点看是否有同色,就是因为这里wa了n次!!!

#define N 1005
vector<int> v[N];
vector<int> lin[N];
int dfn[N],low[N];
bool instack[N],iscut[N];
int num_rt;
int cnt;
int step;
stack<int> sta;
bool g[N][N];
void init(int n){
    for(int i=0;i<=n;i++){
        instack[i] = 0;
        iscut[i] = 0;
        dfn[i] = 0;
        low[i] = 0;
    }
    step = 0;
    cnt = 0;
    while(!sta.empty())sta.pop();
}
void tarjan(int u,int fa){
    low[u] = dfn[u] = ++step;
    sta.push(u);
    instack[u] = 1;
    int i;
    for(i=0;i<v[u].size();i++){
        int to = v[u][i];
        if(to==fa)continue;
        if(!dfn[to]){
            tarjan(to,u);
            low[u] = min(low[u],low[to]);
            if(low[to]>=dfn[u]){
                if(fa==-1)num_rt++;
                else iscut[u] = 1;
                while(1){
                    int tmp = sta.top();
                    sta.pop();
                    iscut[tmp] = 0;
                    instack[tmp] = 0;
                    lin[cnt].push_back(tmp);
                    if(tmp==to)break;
                }
                lin[cnt].push_back(u);
                cnt++;
            }
        } else if(instack[to]) low[u] = min(low[u],dfn[to]);
    }
}
int col[N];
bool dfs(int id,int u,int c){
    int i;
    col[u] = c;
    for(i=0;i<lin[id].size();i++){
        int to = lin[id][i];
        if(u==to || col[to]!=-1)continue;
        if(g[u][to]){
            dfs(id,to,c^1);
        }
    }
    return true;
}
bool ok[N];
int solve(int n){
    int i,j;
    for(i=1;i<=n;i++){
        if(!dfn[i]){
            num_rt = 0;
            tarjan(i,-1);
            if(num_rt>=2){
                iscut[i] = 1;
            }
        }
    }
    int ans = 0;
    memset(ok,false,sizeof(ok));
    bool tag = 0;
    for(i=0;i<cnt;i++){
        for(j=0;j<=n;j++)col[j]=-1;
        int sz = lin[i].size();
        dfs(i,lin[i][0],1);
        bool tag = 0;
        for(j=0;j<sz;j++){
            for(int k=0;k<sz;k++){
                int a = lin[i][j],b = lin[i][k];
                if(a!=b && g[a][b] && col[a]==col[b]){
                    tag = 1;
                    break;
                }
            }
            if(tag)break;
        }
        if(tag){
            for(j=0;j<sz;j++){
                ok[lin[i][j]] = 1;
            }
        }
    }
    for(i=1;i<=n;i++){
        if(!ok[i])ans++;
    }
    return ans;
}

int main(){
    int n,m;
    while(scanf("%d%d",&n,&m) &&(n+m)){
        int i,j;
        memset(g,true,sizeof(g));
        init(n);
        while(m--){
            int x,y;
            scanf("%d%d",&x,&y);
            g[x][y] = g[y][x] = false;
        }
        for(i=0;i<=n;i++){
            v[i].clear();
            lin[i].clear();
        }
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++){
                if(g[i][j] && i!=j){
                    v[i].push_back(j);
                }
            }
        }
        printf("%d\n",solve(n));
    }
    return 0;
}



















分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络 网络安全的本质是攻防对抗,更本质的其实是人与人心智与技术的全面较量。 欺骗诱捕技术作为攻防对抗技术中比较特殊的技术,能够使防守方更多掌握对抗中的主动权,诱导攻击,迫使攻击者耗费精力的同时,留下丰富的攻击信息。究其本质,欺骗诱捕技术更深层次考验的不止是技术的能力,还有对于攻击者作为人的理解。 国外主流蜜罐产品分析 根据MarketsandMarkets《欺骗技术市场规模、份额和2021年全球市场预测》中提到的欺骗诱捕技术全球主要供应商及产品,我们分析了几款国外主流的蜜罐产品,希望更清晰看到欺骗诱捕技术应 阅读详情

相关推荐

企业微信审批流开发避坑指南:从零搭建自定义审批模板(含完整代码)

本文为企业微信审批流开发提供了从零搭建自定义审批模板的完整指南。通过对比内置模板与自建引擎的优劣,详细阐述了利用企业微信开放API和自建应用实现高度灵活审批流程的方案。文章重点解析了前端JS-SDK安全调用、后端签名生成与回调处理的核心代码,并分享了流程引擎设计、安全加固及性能监控等实战经验,帮助企业开发者避开常见陷阱,构建贴合业务的自定义审批系统。

weixin_28358083的博客 968

poj2942 点-双联通+二分图染色

题意:有一群骑士要坐在一个圆形的桌子上,他们之间有些人相互讨厌,所以不能挨着,要求算出一次也不能坐在桌子上的人,每次会议桌子必须奇数个人,一个人不能开会 题解:可以先建一个补图,要满足题目条件我们只要找出所有奇圈(奇数个点的环),求出点-双联通分量,对于每一个单独的点-双连通分量,如果它一定是一个奇圈,那么不能够通过二分图染色,可以通过画图验证这条结论,那么我们对于所有的奇圈里的点进行染色,最后...

weixin_30779691的博客 170

Python自动化批量识别化学分子结构——从图片到SMILES/SDF的实战指南

本文提供了使用Python自动化批量识别化学分子结构图片的实战指南。详细对比了基于Molvec API的在线快速方案与本地部署OSRA工具的两种路径,包含完整的代码示例、环境配置及优化技巧,帮助化学研究者高效地将图片批量转换为SMILES或SDF格式,显著提升数据处理效率。

apple5的专栏 946

poj2942圆桌骑士(点双连通分量+二分图染色法判奇圈)

之前一直不明白点双连通分量能用来干嘛,比如边双连通分量可以问加几条边能变成边双连通,这个题目是这样的,每个圆桌会议至少三个骑士参加,因为需要表决意见,所以骑士数目必须是奇数个,直到那些骑士互相憎恨,也就是不能坐在一起的,把能坐在一起的建边,求无法参加任何会议的骑士的个数,重点是任何会议,这点非常关键,这道题之前一直卡在这里,还有就是有的人属于好几种双连通分量,所以全部标记之后再减掉比较好,至于奇数个

银之夏雪的博客 2076

Unity技能系统核心:从理论到实践构建可扩展的Buff管理器

本文深入探讨了Unity游戏开发中构建可扩展技能系统的核心——Buff管理器。通过剖析三层架构(数据、逻辑、渲染)与独立组件管理模式,提供了从Buff数据定义、管理器核心实现到可视化编辑器搭建的完整实践方案,旨在解决技能系统维护难题,提升开发效率与代码质量。

weixin_29002209的博客 253

【时序列】时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 详细理解python sm.tsa.seasonal_decompose

【时序列】时序列数据如何一步步分解成趋势(trend)季节性(seasonality)和误差(residual)- 详细理解python sm.tsa.seasonal_decompose 在做时序列分析的时候,好多教程都告诉你要把时序列分解成趋势,季节性,残差,然后画图看一下有没有趋势变化,有没有季节性。像这样: import statsmodels.api as sm decomposition = sm.tsa.seasonal_decompose(train['Count'] ,model='add

weixin_47442572的博客 2万+

POJ2942:点连通分量+二分图染色

POJ2942 题解: 首先把不敌对的骑士连一条边,即原图的补图。 要开一个会议,得形成一个环。所以求点-双连通分量。 考虑每个连通分量,人数必须为奇数个。所以进行二分图奇偶染色。 这里有一个结论:二分图一定是偶圈。如果染色失败,那么说明是奇圈,满足条件。 还有一个结论:如果存在一个环为奇圈,那么整个连通分量的每一点都在某个奇圈当中。 代码: #include &lt;cstrin...

FlyingJack 313

Transformer-LSTM预测 | 基于Transformer-LSTM的多变量单步时间序列预测(Matlab)

Transformer-LSTM预测 | 基于Transformer-LSTM的多变量单步时间序列预测(Matlab)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 192

poj2942Knights of the Round Table重连通分量

该题是重连通分量,不是边双连通分量,因为重连通分量有一个边双连通分量没有的性质,就是如果重连通分量内如果有奇圈,则该分量所有的点都包含于一个奇圈;这和题意中,如果该骑士可以参加任何一个会议就不用被开除一致。而即使边双连通分量 ,并且其中包含奇圈,但并不能判断除了该奇圈以外的点是否包含于另外的奇圈。(奇圈就是点的个数是奇数的圆环) 证明:如果重连通分量内如果有奇圈,则该分量所有的点都包含于

emmmmmm 2426

【系统分析师】高分论文:论软件开发方法及应用(数据中心CMDB 系统)

【摘要】本文以作者负责的"数据中心CMDB系统"建设项目为例,探讨了系统分析和建模方法在IT项目中的应用实践。项目基于ITIL框架,旨在整合分散的配置信息,构建统一CMDB平台。通过分析结构化、面向对象和构件化三种开发方法特点,项目最终采用结构化分析与V模型结合的方式,并融入面向对象设计理念。系统经过4个月开发后上线,通过增量迭代满足不同数据源接口需求,采用适配器模式提高兼容性。经过2个月试点运行和优化,系统已稳定运行并获得用户认可,为后续IT服务管理集成奠定了基础。项目实施使作者积累了

数据知道的博客 4300

【100%通过率】2023华为od机试C卷【围棋的气】Python 实现

围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19 x 19 = 361 个交点,对奔双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。 “气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中,有几个交叉点没有棋子,由此可知:

MISAYAONE的博客 1858

POJ2942-Knights of the Round Table

全解题报告索引目录 -> 【北大ACM – POJ试题分类】 转载请注明出处:http://exp-blog.com ------------------------------------------------------------------------- 大致题意: 亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结...

ζёСяêτ - 小優YoU 1万+

Windows 上 openclaw onboard --install-daemon 命令的安装位置和启动配置

摘要:Windows系统中,执行openclaw-cnonboard--install-daemon命令会创建计划任务OpenClawGateway,该任务在用户登录时自动运行位于%USERPROFILE%.openclaw\gateway.cmd的脚本文件来启动服务。管理方法包括通过任务计划程序或命令行(schtasks)查看/启停任务,使用openclaw gateway命令操作服务,或通过删除计划任务和脚本文件完全卸载服务。该机制确保OpenClawGateway服务随系统登录自动启动。(149字)

大坡3D软件开发 1375

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

http://poj.org/problem?id=2942 题意: 有N个骑士,给出某些骑士之间的仇恨关系,骑士们开会时会围坐在一个圆桌旁。一次会议能够顺利举行,要满足两个条件:1:任意相互憎恨的两个骑士不能相邻 2:开会人数为大于2的奇数 若某个骑士任何会议都不能参加,那么就必须将他踢出,给出骑士之间的仇恨关系,问最少需要踢出多少个骑士? 思路: 题目要求踢出的人最少,那么

2301

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

POJ - 2942(点双连通分量,二分图判奇环)

Knights of the Round Table 首先理解题意很重要。。。题意看得我云里雾里,意思是有多个会议,每个会议都要满足要求,如果一个人他是什么会议都参加不了,那他就要被踢出了。 关系不好的不坐一起,那么反向建边,把那些能坐一起的建一条边,然后找点双连通分量。 在一个点双连通分量中,如果存在奇环,如果有点x在这个环外,那么一定存在x与这个奇环上的点形成简单环,因为奇环两个点间一定存在一奇一偶,所以类似缩点后,就用染色法判断存在奇环没,类似判定二分图,有奇环就不是二分图。 tarjan这种多组输入

weixin_45714726的博客 409

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

POJ 2942 Tarjan v-DCC + 二分图判定

题意 传送门 POJ 2942 Knights of the Round Table 题解 建出补图,即没有仇恨的两个骑士间连边,问题转化为求图中不被任何奇环包含的节点数量。 无论是 e−DCCe-DCCe−DCC 或 v−DCCv-DCCv−DCC 都满足在同一环上的两个节点位于相同的双连通分量。否则,将与双连通分量的极大性矛盾。 若图中存在奇环,则图不是二分图,可以用 DFSDFSDFS 的染色法判定,但并不能求出所有的奇环。同一个 e−DCCe-DCCe−DCC 中两个不同的环至少存在一个交点;而同一

neweryyy的博客 167

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

poj2942 圆桌骑士(点双连通分量+二分图染色法判奇环)

题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1。2.总人数为奇数。3.有仇恨的骑士不能挨着坐。问有几个骑士不能和任何人形成任何的圆圈。 分析:图论综合题,涉及补图、(点)双连通分量、奇环、二分图、交叉染色法、Tarjan算法,详见《算法竞赛进阶指南》P407-408。 代码: #include<iostream> #incl...

常胜将军的博客 349

poj 2942 Knights of the Round Table(点双连通分量)

题目链接:http://poj.org/problem?id=2942 转载自:https://blog.youkuaiyun.com/lyy289065406/article/details/6756821 大致题意: 亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求: 1、 相互憎恨的两...

agyohust791263的博客 272

POJ - 2942 Knights of the Round Table 二分图染色 点双连通分量 tarjan模板

题意:亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,  并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求:  1、 相互憎恨的两个骑士不能坐在直接相邻的2个位置; 2、 出席会议的骑士数必须是奇数,这是为了让投票表决议题时都能有结果。 注意:1、所给出的憎恨关系一定是双向的,不存在单向憎恨关系。         2、由于是圆桌会议,则每个出席的骑士身边必定...

陌离将离 294

POJ 2942 Knights of the Round Table 补图+点双连通分量+染色法判二分图

http://poj.org/problem?id=2942 Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the other knights are fun things to do. Therefore...

xiji333的博客 265

POJ 2942(Tarjen的点双连通分量+交叉染色法)

这题是点双连通分量,我一开始写成边的…… 首先点双连通分量可能重叠……(1,2) (2,3) (3,1) (3,4) (4,5) (5,6) (3.6) 这时有(1,2,3)和(3,4,5,6)两组双连通分量 故一定要在Tarjen里判……另外Stack存边时注意特判(Stack不能为空) 当dfs[k] 请注意在推送(k,i)后遍历得到的一堆边(包括(k,i))组成了一组点双连通分量

nike0good |Oier&ACMer | 熟能生巧 1977

poj 2942(奇圈,双连通分量,交叉染色)

1、题目类型:图论、点双强连通分量、Tarjan算法。 2、解题思路:题意,N个骑士中某些骑士之间会有仇恨。骑士们开会时围坐在一个圆桌旁。一次会议能够举行,当且仅当没有相邻的两个骑士相互仇恨,且开会人数为大于2的奇数。若某个骑士任何会议都不能参加,那么就必须将它踢出。给出骑士之间的仇恨关系,问需要踢出多少个骑士。步骤,(1)建立输入图的补图;(2)类似Trajan算法求解并记录点双强连通分量;(

Weiguang_123的专栏 1462

POJ 2942 ( 补图+判断奇圈(交叉染色法)+Tarjan(点连通分量))

最近学习Tarjan算法,然后昨晚11点看到了这道题,一直做到3点,还是做不出来。于是今天吃完午饭好好重新去看了下Tarjan算法。静下心来慢慢调试程序,没想到一下子就A了。真是太高兴了,除夕夜的惊喜礼物。 题目如下: Knights of the Round Table Time Limit: 7000MS   Memory Limit: 65536K Tot

GentleH's 844

POJ2942Knights of the round table

这题第一次做的人一般是颓题解的。 首先我们转化一下问题,既然厌恶的人不能一起出席,是一种不传递关系,我们构建补图,这样补图的边表示两个骑士可以同时出席。 此时,由于只能有奇数个人参加,则我们要找出奇环,奇环内的人是可以同时参加的,而链上的是不可以的(想想为什么),而且根据题意,这样建图后的孤岛点是废的。所以缩vDcc(点双)的时候不用管他。为什么要缩点双呢?因为vDcc有这样一个性质: 只要...

weixin_30566149的博客 85

【代码】POJ 2942

// 题目来源:POJ 2942 ( Central Europe 2005 ) // 题目模型:给定一个无向图G,求图中哪些点不能够在任何奇圈之内(奇圈即点数为奇数的圈) // 解题方法:对图求块,然后在各个块内二分染色判断 // 特别注意:求块的时候在栈中要压边不能压点 #include #include using namespace std; bool map[1002][1002

JarjingX 1266

poj 2942 Knights of the Round Table 补图+点双连通分量+判定二分图

题意:给定n个点m条边。

inf_force 1127
上一篇: 【最大流】HDU 3572
下一篇: 【作业调度—贪心】POJ 2751
leolin_
博客等级 码龄16年 96粉丝 411原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值